Qt核心类QWidget及其派生类详解
目录
- QWidget:窗口基类
- 派生窗口类
- QMainWindow
- QDialog
- 核心成员函数
- setWindowTitle()
- setWindowIcon()
- size() & resize()
- setPalette()
- 背景设置:QPalette详解
- 完整源码示例
1. QWidget:窗口基类
核心作用
QWidget
是Qt中所有窗口部件的基类,提供窗口的基础功能:
- 事件处理(鼠标、键盘等)
- 几何管理(位置/尺寸)
- 样式渲染
- 父子层级关系管理
关键特性
cpp
QWidget* window = new QWidget(); // 创建独立窗口
window->show(); // 显示窗口
2. 派生窗口类
2.1 QMainWindow
功能 :应用程序主窗口框架
核心组件:
cpp
QMainWindow mainWin;
mainWin.setWindowTitle("Editor");
mainWin.resize(1024, 768);
// 添加核心组件
QMenuBar* menuBar = mainWin.menuBar();
menuBar->addMenu("文件");
mainWin.setStatusBar(new QStatusBar());
mainWin.setCentralWidget(new QTextEdit());
2.2 QDialog
功能 :创建对话框窗口
使用场景:
cpp
QDialog dialog;
dialog.setWindowTitle("警告");
QLabel* label = new QLabel("确认删除?", &dialog);
QPushButton* btn = new QPushButton("确认", &dialog);
dialog.exec(); // 模态显示
3. 核心成员函数详解
3.1 setWindowTitle()
设置窗口标题栏文本:
cpp
widget->setWindowTitle("Qt Demo v1.0");
3.2 setWindowIcon()
设置窗口图标(显示在标题栏/任务栏):
cpp
widget->setWindowIcon(QIcon(":/icons/app.png"));
3.3 size() & resize()
- size():获取当前尺寸
- resize():动态调整尺寸
cpp
QSize currentSize = widget->size(); // 获取尺寸
widget->resize(800, 600); // 设置新尺寸
3.4 setPalette()
设置窗口调色板(颜色/背景):
cpp
QPalette palette;
palette.setColor(QPalette::Window, Qt::lightGray); // 设置背景色
widget->setPalette(palette);
4. 背景设置:QPalette详解
核心步骤:
- 创建
QPalette
对象 - 使用
QBrush
或QPixmap
设置画刷 - 应用到窗口
4.1 纯色背景
cpp
QPalette palette;
palette.setBrush(QPalette::Window, QBrush(Qt::blue));
widget->setPalette(palette);
4.2 图片背景
cpp
QPixmap bgImage(":/background.jpg"); // 加载图片
QPalette palette;
palette.setBrush(QPalette::Window, QBrush(bgImage));
widget->setPalette(palette);
widget->setAutoFillBackground(true); // 必须启用!
5. 完整源码示例
cpp
#include <QApplication>
#include <QMainWindow>
#include <QPalette>
#include <QPixmap>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建主窗口
QMainWindow mainWindow;
mainWindow.setWindowTitle("Qt高级窗口示例");
mainWindow.resize(800, 600);
// 设置背景图片
QPixmap bg(":/images/sky.png");
QPalette palette;
palette.setBrush(QPalette::Window, QBrush(bg));
mainWindow.setPalette(palette);
mainWindow.setAutoFillBackground(true);
// 添加菜单栏
QMenu* fileMenu = mainWindow.menuBar()->addMenu("文件");
fileMenu->addAction("新建");
mainWindow.show();
return app.exec();
}
关键要点总结:
QWidget
是Qt窗口体系的基石QMainWindow
适合构建主界面框架QDialog
用于弹窗交互QPalette
+QPixmap
实现灵活背景控制- 尺寸管理通过
size()
/resize()
动态调整
原创技术笔记,转载需注明出处。更多系统编程内容持续更新中...