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

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

相关推荐
Persistent的粽子!2 小时前
C++:类与对象(二)
开发语言·c++
Dreams°1232 小时前
【Java后端+Vue前后端分离:内网正常、公网访问异常|5个高频经典踩坑完整复盘】
java·开发语言·vue.js
蒸蒸yyyyzwd3 小时前
cpp 选手备战秋招学习笔记 day23
c++·求职招聘
.YM.Z3 小时前
C++ STL 容器深度剖析:vector 与 list 的模拟实现及对比
开发语言·c++·vector·list
lsylalalala4 小时前
多线程(4)
java·开发语言·多线程
小白不想画工图4 小时前
银河麒麟V10系统安装QT5.12
linux·开发语言·qt·银河麒麟
IT_Octopus4 小时前
JSON 日志里的 `{“$ref“:“$.xxx“}`:从 fastjson 兼容包到原生 fastjson2 的迁移实录
开发语言·python·json
geovindu4 小时前
python:HandWriting Recognition using paddlepaddle
开发语言·后端·python·paddlepaddle
mengzhi啊5 小时前
QEventLoop loop配合loop.exec();替代while(1)。电脑cpu占用为0,使用while(1)cpu占用率100%
c++·qt
HugoStudio_SWAN5 小时前
洛谷 P1319 / P1320 压缩技术——同一枚硬币的正反面
c++·学习·程序人生·算法