【QT入门】QWidget类的简单介绍

往期回顾:

【QT入门】 QListWidget各种常见用法详解之图标模式-CSDN博客

【QT入门】 QScrollArea实际运用之导航栏设计-CSDN博客

【QT入门】 QScrollArea实际运用之滑动Widget设计-CSDN博客

【QT入门】QWidget类的简单介绍

一、什么是QWidget

QWidget 类是 Qt 框架中的一个基础类,用于创建用户界面中的可视化部件。它提供了一个抽象的窗口部件,可以包含子部件并响应用户输入。

1、常用功能:

1.1继承关系:

QWidget 类是Qt中众多窗口部件类的基类,包括QFrame、QDialog、QMainWindow 等都是从 QWidget 类继承而来的。QWidget是所有ui组件的祖先类。

1.2可视化部件:

QWidget是一个可视化部件,可以在应用程序的用户界面中显示出来。它可以包含众多子部件,形成复杂的界面布局。 而且很多控件其实本质上都还是一个QWidget,这个感觉尤其是在自定义控件的时候,尤为强烈。

1.3事件处理:

QWidget可以响应用户输入事件,比如鼠标点击、键盘输入等。通过重写事件处理函数,可以实现自定义的交互逻辑。 这个功能用的极其广泛,毕竟与用户进行交互基本上可以说是必须的一个功能。

1.4绘图功能:

QWidget 可以重写 paintEvent 函数来进行绘图操作,实现自定义的绘图效果。且绘图效果是很厉害的,比如说,我们可以通过重写 paintEvent 函数绘制一个按钮的图案来表示音量按键。

1.5布局管理:

QWidget 可以使用布局管理器(如 QLayout)来管理子部件的位置和大小,实现灵活的界面布局。 我个人感觉实际在做布局的时候,也是把整个Widget界面,切割成了一个个小的Widget,再分别进行布局,使得整个过程清晰明确。

1.6属性设置:

QWidget提供了丰富的属性设置接口,可以设置部件的大小、位置、背景色等属性。 通过最开始在构造函数里进行界面初始化,就可以确定下整个窗口的大体框架。

2、常用功能举例:

2.1设置标题和大小

我们创建一个简单的窗口,并设置其窗口的标题和大小,最后显示出来。

复制代码
#include <QtWidgets>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建一个QWidget对象
    QWidget w;
    w.setWindowTitle("Simple Window");
    w.resize(400, 300);
    w.show();

    return app.exec();
}
2.2重写绘图函数

我们创建一个自定义的 QWidget 子类 CustomWidget,并重写 paintEvent 函数,通过paintEvent 函数实现在窗口中绘制文本。

复制代码
#include <QtWidgets>

class CustomWidget : public QWidget {
public:
    void paintEvent(QPaintEvent *event) override {
        QPainter painter(this);
        painter.drawText(rect(), Qt::AlignCenter, "Custom Widget");
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建一个自定义的QWidget子类对象
    CustomWidget customWidget;
    customWidget.setWindowTitle("Custom Widget");
    customWidget.resize(400, 300);
    customWidget.show();

    return app.exec();
}
2.3布局管理器:

我们先创建一个窗口,并使用水平布局管理器QHBoxLayout将两个按钮水平排列在窗口中。

复制代码
#include <QtWidgets>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建一个QWidget对象
    QWidget window;
    window.setWindowTitle("Layout Example");

    // 创建两个按钮
    QPushButton *button1 = new QPushButton("Button 1");
    QPushButton *button2 = new QPushButton("Button 2");

    // 使用水平布局管理器
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(button1);
    layout->addWidget(button2);

    window.setLayout(layout);
    window.show();

    return app.exec();
}

我们上述只是很简单的列举其常用功能,在实际开发中,可以根据需要进一步扩展和定制 QWidget 类,以满足复杂的界面需求。

同时呢,建议大家多去看看QWidget源码,**Qt所有的窗口、控件以及布局都是派生于Qwidget,Qt很多问题都可以从QWidget类找到答案,学习Qt大部分就是在与QWidget打交道。**只要能把QWidget学好,基本上就不会有大问题。


都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

相关推荐
KaMeidebaby23 分钟前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17681 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
Mininglamp_27181 小时前
Claude Code 封禁中国开发者之后:本地 AI 编程工具的替代方案实测
开发语言·人工智能·windows·开源软件·ai-native
思麟呀2 小时前
C++17(三)if constexpr+折叠表达式
开发语言·c++
醉城夜风~2 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
qydz112 小时前
杰理开发基础知识(3)
开发语言·嵌入式开发·杰理科技
贾斯汀frank2 小时前
C# 15 类型系统改进:Union Types
开发语言·windows·c#
阿里嘎多学长2 小时前
2026-07-10 GitHub 热点项目精选
开发语言·程序员·github·代码托管
CHHH_HHH2 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
jimy14 小时前
C语言模拟对象、方法:“函数指针+结构体“复用函数指针指向的函数体
c语言·开发语言