QT编程-day2

创建一个新工程时,需要选择一个基类,在QT编程中有三大基类。
1. QMainWindow:是基于主窗口类的程序,适用于较为复杂的应用程序。除了中央客户区界面,还包括工具栏、菜单栏、状态栏等。
2. QWidget:是最简单的最基本的窗体程序,可以放置多个控件。
3. QDialog:顾名思义,是基于对话框的程序,对话框一般用于弹窗,也可以用于主界面显示,其是从QWidget基类继承过来的,并丰富了一些功能。

选择QWidget基类之后,生成了头文件:widget.h 源文件:main.cpp和widget.cpp,以及界面文件:widget.ui 还有一个helloCreator.pro文件

首先看:widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

开头定义的WIDGET_H宏是防止重复包含,保证头文件智慧被包含一次。

namespace Ui {
class Widget;
}

这是个前向声明,表示Ui名字空间里有一个叫Widget的类,Ui::Widget类就是在生成项目时,用uic工具编译widget:ui得到的ui_widget.h里的辅助构建界面类的名字。使用前向声明
配合后续定义的类成员指针(Ui::Widget *ui),就可以方便的使用辅助构建界面类Ui::Widget,而不需要在头文件里包含ui_widget.h。
接着是类定义:

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

这几桔定义了全局类WIdget,和Ui::Widget有重名。但有名字空间前缀区别,在ui名字空间里的是辅助构建界面的类。不带名字空间前缀的是全局类,从Qwidget继承而来的,这时真正的窗口类。Q_OBJECT宏以支持
元对象系统(不太理解)。再就是构造函数以及析构函数,都是public类型。explicit关键字是强调必须显式构造该类对象,不使用隐式转换间接生成该类的对象。构造函数里的参数只有父类对象指针,默认的0(NULL)代表没有父窗口,也就是以操作系统为父窗口的意思。
最后一行创建的指针还没有创建实际的辅助构建类的对象,指针目前没有初始化,只是起到了展位的作用,以后才会给他赋值。

看一下Pro文件:

#-------------------------------------------------
#
# Project created by QtCreator 2017-07-06T19:00:44
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = helloCreator
TEMPLATE = app


SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

FORMS    += widget.ui

其中QT += core gui是为项目添加core核心模块和gui基础绘图模块
\是行拼接的意思
ui_widget.h会在项目生成时,由Makefile指定uic工具根据widget.ui编译而成,ui_widget.h属于中间文件,没有必要包含在pro文件里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值