zoukankan      html  css  js  c++  java
  • Widget代码讲解

    参考:https://zhuanlan.zhihu.com/p/28225011

    QT版本为5.12.4

    1.main.cpp

     1 #include "widget.h"
     2 #include <QApplication>
     3 
     4 int main(int argc, char *argv[])
     5 {
     6     QApplication a(argc, argv);
     7     Widget w;
     8     w.show();
     9 
    10     return a.exec();
    11 }

     为了叙述方便,现约定:在以后的代码分析中,方括号中的数字代表行号,例如【1-3】表示第1行到第3行的代码。

    【1】包含widget.h头文件,这是我们创建窗口类时,Qt自动为我们生成的头文件,且文件名都为小写。

    【2】包含QApplication类。

    【4-11】main函数。

    【6】创建一个QApplication实例。

    如果所创建的是一个窗口应用程序,那么必须要有且只有一个这样的实例,在创建QApplication实例后,会自动将指针赋值给Qt的全局变量qApp,如果想在其它地方使用QApplication实例,则可以直接调用qApp。

    因为QApplication实例会进行大量的初始化工作,所以要在使用任何对象之前就创建QApplication实例,因此,main函数开头便创建了QApplication实例。

    如果创建的是一个非窗口的应用程序,那么可以调用QCoreApplication来创建实例。

    QApplication主要做以下事情(只需了解即可):
    1:使用用户的桌面设置,初始化应用程序,例如窗口的调色板,字体等。
    2:执行事件处理。
    3:也可根据命令行参数,设置自己的内部状态。
    4:制定窗口样式,颜色调配,文字国际化。
    5:设置剪切板,管理鼠标事件。

    【7-8】创建Widget实例,并显示。

    【10】进入Qt的主循环事件。当调用exit()函数时,才会退出循环,退出main函数。当程序在准备退出主循环时,会发出aboutToQuit()信号,如果有某些在退出程序前要处理的事情,可链接此信号进行处理。除了主循环外,Qt还有本地循环,可以理解为子循环,这个会在后面的讲解中讲述。

    2.widget.h

     1 #ifndef WIDGET_H
     2 #define WIDGET_H
     3 
     4 #include <QWidget>
     5 
     6 namespace Ui {
     7 class Widget;
     8 }
     9 
    10 class Widget : public QWidget
    11 {
    12     Q_OBJECT
    13 
    14 public:
    15     explicit Widget(QWidget *parent = nullptr);
    16     ~Widget();
    17 
    18 private:
    19     Ui::Widget *ui;
    20 };
    21 
    22 #endif // WIDGET_H

    【6~8】定义命名空间Ui

    【10】Widget公有继承QWidget,这样我们就可以调用QWidget提供的方法。QWidget是所有Qt窗口控件的基类,一般情况自定义窗口控件都应该继承QWidget或其子类。

    【12】Q_OBJECT宏,必须在类的私有声明中声明这个宏,这样就可以使用Qt的信号槽机制,元对象系统,对象树等Qt特有的功能,否则无法使用。所以这里推荐在创建类时,最好加上此声明,这样的代码会得到很多Qt提供的便利接口。

    【15】构造函数,其中parent参数,可指定父窗口。

    【19】ui界面对象指针,凡是需要ui界面中的控件对象指针,都可以通过这个指针来进行调用访问。

    3.widget.cpp

     1 #include "widget.h"
     2 #include "ui_widget.h"
     3 
     4 Widget::Widget(QWidget *parent) :
     5     QWidget(parent),
     6     ui(new Ui::Widget)
     7 {
     8     ui->setupUi(this);
     9 }
    10 
    11 Widget::~Widget()
    12 {
    13     delete ui;
    14 }

    【5】如果有参数parent不为空,则Widget会成为该指针所指窗口的子窗口

    【6】创建Ui::Widget界面对象,并将指针赋值给ui,创建的对象会在析构函数中释放

    【8】设置ui界面

     

  • 相关阅读:
    广佛肇城轨年内通车 佛山西站预计2017年中通车
    MTK+Android编译
    电量检测芯片BQ27510使用心得
    放大电路的分析方法
    放大电路的分析方法
    模拟电子放大电路分析
    模拟电子技术二极管
    unsigned 整型实现无溢出运算
    hdu 5317 RGCDQ(前缀和)
    CodeForces 429 B Working out(递推dp)
  • 原文地址:https://www.cnblogs.com/lei-zi/p/11124346.html
Copyright © 2011-2022 走看看