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界面

     

  • 相关阅读:
    Git 基础
    SharePoint 2013 对象模型操作"网站设置"菜单
    SharePoint 2013 隐藏部分Ribbon菜单
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 设置自定义布局页
    SharePoint 2013 "通知我"功能简介
    SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
    SharePoint 禁用本地回环的两个方法
  • 原文地址:https://www.cnblogs.com/lei-zi/p/11124346.html
Copyright © 2011-2022 走看看