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

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

相关推荐
肆忆_6 小时前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星9 小时前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛2 天前
delete又未完全delete
c++
端平入洛3 天前
auto有时不auto
c++
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1234 天前
matlab画图工具
开发语言·matlab
dustcell.4 天前
haproxy七层代理
java·开发语言·前端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
哇哈哈20214 天前
信号量和信号
linux·c++
多恩Stone4 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc