目录

Qt 的介绍

创建一个 Qt 程序

Qt 的框架

项目文件(.pro)

创建一个空的 Qt 程序(hello qt)


Qt 的介绍

Qt是一个跨平台的C++用户图形界面应用程序框架。

创建一个 Qt 程序

1、首先,我们需要新建一个Qt程序。点击文件→新建文件或项目。

qt for android 应用保活_QT

2、在弹出的子窗口中,选择Application下的Qt Widgets Application,再点击Choose。

qt for android 应用保活_#include_02

3、接着,填写项目名称和存放的路径。

qt for android 应用保活_QT_03

4、选择要使用的编译器

qt for android 应用保活_Qt_04

5、选择基本类的基类,并填写基本类的类名

qt for android 应用保活_Qt_05

P.S:

QMainWindow主要用于PC端,即带菜单栏的windows窗口;

QWidget是其他所有用户界面元素的基类;

QDialog是对话框,用于执行短期任何或者与用户进行交互。

假设我们指定的基本类类名为className,工程创建完毕后,工程目录下会生成className.h、className.cpp以及main.cpp三个主要的文件。

6、至此,一个Qt Widgets Application 创建完毕。

qt for android 应用保活_QT_06

Qt 的框架

以下是创建一个application后main.cpp文件中自动生成的内容,MyWidget是创建项目时我们指定的基本类名称。

//main.cpp
#include "mywidget.h"

//QApplication应用程序类
//Qt头文件没有.h
//头文件和类名一样
#include <QApplication>

int main(int argc, char *argv[])
{
    //有且只有一个应用程序类的对象,也就是这里的a
    QApplication a(argc, argv);

    //MyWidget继承于QWidget,QWidget是一个窗口基类
    //所以MyWidget也是窗口类
    //w就是一个窗口对象
    MyWidget w;

    //窗口创建默认是隐藏的,需要人为显示,用show方法来显示它
    w.show();

    //这一句等同于
    //a.exec();
    //return 0;
    return a.exec();
}

P.S:exec()的作用是利用while让程序一直执行,直到用户操作中断这个循环。

实验:

1)常规做法,return a.exec()

#include "Widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }

如图所示,显示一个空白的窗口。 

qt for android 应用保活_qt for android 应用保活_07

2)将 return a.exec(); 改为return 0;

发现窗口会一闪而过。

原因是直接 return 0 就达不到事件循环并显示的效果,程序直接退出了,而exec就是在这里进行了循环,一直循环处理着用户和系统的事件。

3) 在return a.exec(); 前面加上一个死循环 while(1);

鼠标指针变为加载中,并且窗口无法关闭。

qt for android 应用保活_qt for android 应用保活_08

结论:

exec() 的作用:

1. 进入时间循环;

2. wait,直到响应a可能的输入;

3. QT接收和处理用户及系统交代的事件(消息),并传递到各个窗口;

4. 程序遇到 exit() 退出时,机会返回 exec() 的值。

【转自:https://0x9.me/b0WEM

下面是Qt项目的基本框架

//main.cpp
#include "mywidget.h"
#include <QApplication>

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

    //自己写的内容

    return a.exec();
}
//mywidget.cpp
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

class MyWidget : public QWidget
{
    Q_OBJECT    //信号与槽时需要使

public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();
};

#endif // MYWIDGET_H

P.S:强烈建议所有QObject的子类都使用Q_OBJECT宏,不管实际上是否使用信号和槽,以及属性。 

【详见:】

项目文件(.pro)

.pro文件用#来进行注释,注释范围到该行末尾。

使用头文件时,要在工程项目文件中加入对应的模块(找到头文件,按F1,在帮助文档中会显示对应的模块)。

比如使用QWidget需要在.pro文件中加入 QT += core gui

#-------------------------------------------------
#
# Project created by QtCreator 2020-06-26T23:46:04
#
#-------------------------------------------------

#模块
QT       += core gui

#高于4的版本,添加QT += widgets,为了兼容Qt4
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

#应用程序的名字,可以修改,相应的.exe名称也会同步更新
TARGET = 01_QtTest

#指定Makefile的类型,app
TEMPLATE = app

#源文件 .cpp文件
SOURCES += main.cpp\
        mywidget.cpp

#头文件 .h文件
HEADERS  += mywidget.h

qt for android 应用保活_#include_09

创建一个空的 Qt 程序(hello qt)

1、创建一个空项目,点击New Project-其他项目-empty qmake project。创建后只有一个.pro文件,并且为空。

qt for android 应用保活_Qt_10

qt for android 应用保活_qt for android 应用保活_11

2、先在.pro文件中添加模块,写入

QT += widgets

3、然后创建main.cpp文件,右键项目→添加新文件→-c++/c++ source file。

qt for android 应用保活_qt for android 应用保活_12

qt for android 应用保活_Qt_13

4、写入以下代码,至此我们自己实现了一个简单的Widget窗口。

#include <QApplication>
#include <QWidget>    //窗口控件基类

int main(int argc,char **argv){
    QApplication app(argc,argv);
    QWidget w;
    w.setWindowTitle("helloqt");    //设置窗口标题
    w.show();    //显示窗口
    app.exec();
    return 0;
}

P.S:build-文件夹在编译时自动生成