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

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

相关推荐
Scott9999HH4 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
2401_841495645 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
fqbqrr5 小时前
2607C++,soui与安卓
c++·soui
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨7 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
fqbqrr9 小时前
2607C++,使用微软detours勾挂工具
c++
人邮异步社区9 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大9 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf