【Qt】QtCreator新建QtWidgetsApplication
- 1、背景
- 2、新建项目
- 3、项目文件
- 4、编译说明
1、背景
操作系统:windows10专业版。
Qt版本:qt-opensource-windows-x86-msvc2013_64-5.7.1.exe
注意:安装了该exe可执行文件,就自动安装了qtcreator5.7.1。
QtCreator是开发Qt程序的IDE。
本博客介绍最基本的QtCreator使用,
即新建项目,选择Application(应用程序)–>“Qt Widgets Application”
2、新建项目
新建的项目是Qt Widgets Application。
step-1:点击菜单栏文件–>新建文件或项目
step-2:模板–>项目(Application)–>Qt Widgets Application
step-3:填写项目名称以及项目目录
step-4:选择编译器工具包Kit
step-5: 填写类名以及选择基类
注意基类一共有3种,分别是:QMainWindow、QWidget、QDialog;
如下图,基类选择的是QMainWindow
step-6: 点击完成
3、项目文件
以上步骤完成Qt Widgets Application项目的新建,将在选择的目录生成项目文件,分别如下:
项目文件QtWidgetsApp.pro:
继承窗体界面class的头文件mainwindow.h:
继承窗体界面class的源文件mainwindow.cpp:
程序入口函数main函数的源文件main.cpp:
界面文件,即xml格式的窗体文件mainwindow.ui:
4、编译说明
4.1、关于ui_mainwindow.h说明:
可以看到QtWidgetApp.pro文件内容中:
FORMS += mainwindow.ui
对应的是mainwindow.cpp源代码中的第2行:
#include "ui_mainwindow.h"
ui文件是xml格式的,Qt编译时,先用uic.exe工具将mainwindow.ui编译生成ui_mainwindow.h头文件。
而mainwindow.cpp源代码中的列表初始化部分如下:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
冒号后面的两行代码,是C++的列表初始化。其中QMainWindow(parent) 是父类构造函数的初始化列表操作,即显式调用基类(父类)的构造函数。
ui(new Ui::MainWindow) 是子类的成员初始化,即初始化ui指针,ui指针在mainwindow.h中定义的。
可以改成如下写法:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
ui=new Ui::MainWindow;
ui->setupUi(this);
}
这个头文件ui_mainwindow.h是c++类,可以通过
uic.exe mainwindow.ui -o ui_mainwindow.h得到,内容如下:
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 5.7.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QMenuBar *menuBar;
QToolBar *mainToolBar;
QWidget *centralWidget;
QStatusBar *statusBar;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QStringLiteral("MainWindow"));
MainWindow->resize(400, 300);
menuBar = new QMenuBar(MainWindow);
menuBar->setObjectName(QStringLiteral("menuBar"));
MainWindow->setMenuBar(menuBar);
mainToolBar = new QToolBar(MainWindow);
mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
MainWindow->addToolBar(mainToolBar);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QStringLiteral("centralWidget"));
MainWindow->setCentralWidget(centralWidget);
statusBar = new QStatusBar(MainWindow);
statusBar->setObjectName(QStringLiteral("statusBar"));
MainWindow->setStatusBar(statusBar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", Q_NULLPTR));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H