{"id":"58954515","type":"page","status":"current","title":"2 创建Qt项目","version":{"by":{"type":"known","username":"xpei","userKey":"2c90931b693d413801693d73eda10000","profilePicture":{"path":"/images/icons/profilepics/default.svg","width":48,"height":48,"isDefault":true},"displayName":"卢鑫培","_links":{"self":"https://wiki.suncaper.net/rest/api/user?key=2c90931b693d413801693d73eda10000"},"_expandable":{"status":""}},"when":"2023-07-09T02:15:16.000Z","message":"","number":2,"minorEdit":false,"hidden":false,"_links":{"self":"https://wiki.suncaper.net/rest/experimental/content/58954515/version/2"},"_expandable":{"content":"/rest/api/content/58954515"}},"body":{"storage":{"value":"

_Toc466556762_Toc4718419902.1 使用向导创建

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

弹出New Project对话框,选择Qt Widgets Application(窗口小部件)

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

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

选择编译套件

向导会默认添加一个继承自CMainWindow的类,可以在此修改类的名字和基类。默认的基类有QMainWindow、QWidget以及QDialog三个,我们可以选择QWidget(类似于空窗口),这里我们可以先创建一个不带UI的界面,继续下一步

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

_Toc466556763_Toc471841991手动创建

添加一个空项目

选择【choose】进行下一步。设置项目名称和路径 —> 选择编译套件 --> 修改类信息 --> 完成(步骤同上),生成一个空项目。在空项目中添加文件:在项目名称上单击鼠标右键弹出右键菜单,选择【添加新文件】

弹出新建文件对话框

在此对话框中选择要添加的类或者文件,根据向导完成文件的添加。

_Toc466556764_Toc471841992.pro文件

在使用Qt向导生成的应用程序.pro文件格式如下:
QT += core gui //包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于Qt4版本 才包含widget模块
TARGET = QtFirst //应用程序名 生成的.exe程序名称
TEMPLATE = app //模板类型 应用程序模板
SOURCES += main.cpp\\ //源文件
mywidget.cpp
HEADERS += mywidget.h //头文件
.pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。.pro文件的写法如下:

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

TARGET = QtDemo

HEADERS += include/painter.h

FORMS += forms/painter.ui

SOURCES += sources/main.cpp sources

RESOURCES += qrc/painter.qrc

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

CONFIG用来告诉qmake关于应用程序的配置信息。
CONFIG = c11//使用c+11的特性
在这里使用"+=",是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用"="那样替换已经指定的所有选项更安全。

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

main入口函数中


cpp\n\nint main(int argc, char *argv[])\n{\n QApplication a(argc, argv);\n Widget w;\n w.show();\n\n return a.exec();\n}\n\n]]>


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

","representation":"storage","_expandable":{"content":"/rest/api/content/58954515"}},"_expandable":{"editor":"","view":"","export_view":"","styled_view":"","anonymous_export_view":""}},"extensions":{"position":14},"_links":{"webui":"/pages/viewpage.action?pageId=58954515","edit":"/pages/resumedraft.action?draftId=58954515","tinyui":"/x/E5ODAw","collection":"/rest/api/content","base":"https://wiki.suncaper.net","context":"","self":"https://wiki.suncaper.net/rest/api/content/58954515"},"_expandable":{"container":"/rest/api/space/2CT","metadata":"","operations":"","children":"/rest/api/content/58954515/child","restrictions":"/rest/api/content/58954515/restriction/byOperation","history":"/rest/api/content/58954515/history","ancestors":"","descendants":"/rest/api/content/58954515/descendant","space":"/rest/api/space/2CT"}}