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() 动态调整

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

相关推荐
cpp_learners1 小时前
QML与C++交互之创建自定义对象
c++·qt·qml
尘世闲鱼1 小时前
解数独(C++版本)
开发语言·c++·算法·解数独
kyle~2 小时前
C/C++字面量
java·c语言·c++
纨妙2 小时前
python打卡day59
开发语言·python
wuxuanok2 小时前
Web后端开发-请求响应
java·开发语言·笔记·学习
Sally璐璐2 小时前
IPSAN 共享存储详解:架构、优化与落地实践指南
开发语言·php
Mr.Winter`3 小时前
轨迹优化 | 基于激光雷达的欧氏距离场ESDF地图构建(附ROS C++仿真)
c++·人工智能·机器人·自动驾驶·ros·ros2·具身智能
csdn_aspnet3 小时前
C++ n条水平平行线与m条垂直平行线相交的平行四边形的数量
c++
像风一样的男人@3 小时前
python --货车装厢问题
开发语言·python
Humbunklung3 小时前
Rust枚举:让数据类型告别单调乏味
开发语言·后端·rust