Qt核心类QWidget及其派生类详解

Qt核心类QWidget及其派生类详解


目录
  1. QWidget:窗口基类
  2. 派生窗口类
    • QMainWindow
    • QDialog
  3. 核心成员函数
    • setWindowTitle()
    • setWindowIcon()
    • size() & resize()
    • setPalette()
  4. 背景设置:QPalette详解
  5. 完整源码示例

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详解

核心步骤

  1. 创建 QPalette 对象
  2. 使用 QBrushQPixmap 设置画刷
  3. 应用到窗口
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();
}


关键要点总结

  1. QWidget 是Qt窗口体系的基石
  2. QMainWindow 适合构建主界面框架
  3. QDialog 用于弹窗交互
  4. QPalette + QPixmap 实现灵活背景控制
  5. 尺寸管理通过 size()/resize() 动态调整

原创技术笔记,转载需注明出处。更多系统编程内容持续更新中...

相关推荐
apocelipes21 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
郝学胜_神的一滴2 天前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
见过夏天3 天前
C++ 基础入门完全指南
c++
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
BadBadBad__AK5 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境5 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境5 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴6 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境8 天前
C++ 的Eigen 库全解析
c++