【qt】桌面应用开发入门

举报
xcc-2022 发表于 2022/11/28 18:52:12 2022/11/28
【摘要】 1、创建Qt项目 1.1 使用向导创建打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项弹出New Project对话框,选择Qt Widgets Application,选择【Choose】按钮,弹出如下对话框设置项目名称和路径,按照向导进行下一步,选择编译套件向导会默认添加一个继承自QMainWindow的类,可以在此修...

1、创建Qt项目

1.1 使用向导创建

打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项

img

弹出New Project对话框,选择Qt Widgets Application,

img

选择【Choose】按钮,弹出如下对话框

img

设置项目名称和路径,按照向导进行下一步,

img

选择编译套件

01_Qt5_Modules

img

向导会默认添加一个继承自QMainWindow的类,可以在此修改类的名字和基类。默认的基类有QMainWindow、QWidget以及QDialog三个,我们可以选择QWidget(类似于空窗口),==QWidget== 是所有能看到的窗口或者控件的父类,QMainWindow、QDialog 都继承自它

image-20221024082855054

这里我们可以先创建一个不带UI的界面,继续下一步

img

系统会默认给我们添加main.cpp、mywidget.cpp、 mywidget.h和一个.pro项目文件,点击完成,即可创建出一个Qt桌面程序。

1.2 一个最简单的Qt应用程序

1.2.1 main函数中

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

main函数
QApplication 就是Qt里边每个应用程序有且仅有一个的应用程序对象
QApplication::exec() 程序的生命循环、消息循环 ,当作以下形式

解释:

  • Qt系统提供的类头文件没有.h后缀
  • Qt一个类对应一个头文件,类名和头文件名一致
  • QApplication应用程序类
    • 管理图形用户界面应用程序的控制流和主要设置。
    • 是Qt生命,一个程序要确保一直运行,就肯定至少得有一个循环,这就是Qt主消息循环,在其中完成来自窗口系统和其它资源的所有事件消息处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理
    • 对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication 对象,不论这个应用程序在同一时刻有多少个窗口。

a.exec()

程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件

	std::cout<<"befor exec"<<std::endl;
    a.exec();
    std::cout<<"after exec"<<std::endl;
    return 0;

我们发现运行到exec会处于等待状态,知道窗口关闭才结束

动画13

如果我们要模仿这个函数,需要用到循环

			while(1)
		 * {
		 *      if(点击x按钮)
		 *          break;
		 *      if(点击了最小化按钮)
		 *          最小化动作;
		 *      ...
		 * }

1.2.2 类头文件

#include <QWidget>

class MyWidget : public QWidget
{
    //引入Qt信号和槽机制的一个宏
    Q_OBJECT

public:
//构造函数中parent是指父窗口,父窗口对象的指针
//如果parent是0或者NULL,那么窗口就是一个顶层的窗口
    MyWidget (QWidget *parent = 0);
    ~ MyWidget ();
};
	//顶层窗口就是在任务栏可以找到的窗口
image-20221024083115428

1.2.3 pro文件

.pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。类似于VS中的.sln 和vsproj文件

以下是.pro文件的一个案例:

#引入Qt的模块,core gui
QT       += core gui
#如果qt版本大于4,那么引入widgets模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#生成最终文件的文件名,可执行文件exe
TARGET = 01_MyWidget
#项目类型,生成什么类型的文件,可执行程序还是库文件
TEMPLATE = app
#要编译的源文件列表
SOURCES += \
        main.cpp \
        mywidget.cpp
#要编译的头文件列表
HEADERS += \
        mywidget.h
    Qt里边绝大部分的类都是继承自QObject ,QObject是一个顶层类
  • 注释

从“#”开始,到这一行结束。

  • 模块引入

QT += 模块名,表示当前项目引入Qt哪些模块。

引入模块的意思就简单理解为引入C/C++头文件搜索路径,如果没引入对应模块就使用该头文件的话会报错说找不到该头文件。当然不必要的模块还是别引入,因为引入模块不仅仅是引入头文件搜索路径那么简单,还包括引入连接的库等一系列操作,会让程序变臃肿。

Qt详细模块有哪些可以参照附录。

  • 模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE = app

    • app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
    • lib - 建立一个库的makefile。
    • vcapp - 建立一个应用程序的VisualStudio项目文件。
    • vclib - 建立一个库的VisualStudio项目文件。
    • subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
  • [ ] 指定生成的应用程序名:

TARGET = QtDemo

  • [ ] 工程中包含的头文件

HEADERS += include/painter.h

  • [ ] 工程中包含的.ui设计文件

FORMS += forms/painter.ui

  • [ ] l工程中包含的源文件

SOURCES += sources/main.cpp sources

  • [ ] 工程中包含的资源文件

RESOURCES += qrc/painter.qrc

  • [ ] greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

这条语句的含义是,如果QT_MAJOR_VERSION大于4(也就是当前使用的Qt5及更高版本)需要增加widgets模块。如果项目仅需支持Qt5,也可以直接添加``QT += widgets`一句。不过为了保持代码兼容,最好还是按照QtCreator生成的语句编写。

  • [ ] 配置信息

CONFIG用来告诉qmake关于应用程序的配置信息。

CONFIG += c++11 //使用c++11的特性(qt5.6以上版本默认使用C++11)

在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项更安全。

1.2.3 命名规范

类名:单词首字母大写,单词和单词之间直接连接,无需连接字符

MyClass,QPushButton
      class MainWindow

Qt中内置的类型,头文件和类命名同名。

  #include <QString>
    QSring str;
   #include <QWidget>
     QWidget w;

函数名字,变量名:首字母小写,之后每个单词首字母大写,单词和单词之间直接连接,无需连接字符

void connectTheSignal();

类的成员变量设置函数用使用 set+成员变量名,获取成员变量的函数直接用成员变量名(如果是bool类型,有可能会用一些表示状态的术语,如isVisilble,hasFocus):

     //普通成员变量设置和获取
    void setText(QString text);
      QString text()const;
     //bool的成员变量设置和获取
     void setEnabled(bool enabled);
      bool isEnabled()const;

1.2.4 QtCreator常用快捷键

运行 ctrl +R

编译 ctrl +B

帮助文档 F1 ,点击F1两次跳到帮助界面

跳到符号定义 F2 或者ctrl + 鼠标点击

注释 ctrl+/

字体缩放 ctrl + 鼠标滚轮

整行移动代码 ctrl + shift + ↑或↓

自动对齐 ctrl + i

同名之间的.h和.cpp文件跳转 F4

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。