Qt6基础篇(七)——运行窗口程序

前言:
   这篇程序为通过CMake编译并运行的第一个Qt6程序。

1 工程代码

  前面介绍了通过Qt Creatore创建的Demo、CMakeLists.txt和UI文件的方法,工程如下。
  main.cpp内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
#include <QApplication>
#include "mainwindow.h"

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

MainWindow w;
w.show();

return app.exec();
}

   mainwindow 是我们通过Qt Creatore创建的UI,并手动编写的一对.h和.cpp文件,其为主窗UI。 MainWindow w 定义了主窗类的对象,并调用 w.show() 将其显示出来。 QApplication 是Qt框架中的核心类,它负责提供了应用程序范围内的功能,它是所有使用Qt进行图形用户界面开发的应用程序的基础。 app.exec() 函数启动了Qt的事件处理机制,使程序能够监听并响应各种事件,比如鼠标点击、键盘输入、窗口重绘等。
  mainwindow.h内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE

namespace Ui
{
class MainWindow;
}

QT_END_NAMESPACE

class MainWindow: public QMainWindow
{
Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:

Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

  定义了主窗口类 MainWindow 公有继承自基类 QMainWindow
  mainwindow.cpp内容如下。

1
2
3
4
5
6
7
8
9
10
11
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

  cpp中实现了构造函数和析构函数。
  mainwindow.ui内容如下,是一个空的主窗口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

  CMakeLists.txt内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cmake_minimum_required(VERSION 3.5)

project(litchi VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Widgets)

qt_add_executable(litchi main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)

target_link_libraries(litchi PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

  其中 qt_add_executable 指定了所有源文件和ui资源文件。
  编译运行后结果如下。

Qt6基础篇(七)——运行窗口程序

前言:
   这篇程序为通过CMake编译并运行的第一个Qt6程序。

1 工程代码

  前面介绍了通过Qt Creatore创建的Demo、CMakeLists.txt和UI文件的方法,工程如下。
  main.cpp内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
#include <QApplication>
#include "mainwindow.h"

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

MainWindow w;
w.show();

return app.exec();
}

   mainwindow 是我们通过Qt Creatore创建的UI,并手动编写的一对.h和.cpp文件,其为主窗UI。 MainWindow w 定义了主窗类的对象,并调用 w.show() 将其显示出来。 QApplication 是Qt框架中的核心类,它负责提供了应用程序范围内的功能,它是所有使用Qt进行图形用户界面开发的应用程序的基础。 app.exec() 函数启动了Qt的事件处理机制,使程序能够监听并响应各种事件,比如鼠标点击、键盘输入、窗口重绘等。
  mainwindow.h内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE

namespace Ui
{
class MainWindow;
}

QT_END_NAMESPACE

class MainWindow: public QMainWindow
{
Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:

Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

  定义了主窗口类 MainWindow 公有继承自基类 QMainWindow
  mainwindow.cpp内容如下。

1
2
3
4
5
6
7
8
9
10
11
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

  cpp中实现了构造函数和析构函数。
  mainwindow.ui内容如下,是一个空的主窗口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

  CMakeLists.txt内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cmake_minimum_required(VERSION 3.5)

project(litchi VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Widgets)

qt_add_executable(litchi main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)

target_link_libraries(litchi PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

  其中 qt_add_executable 指定了所有源文件和ui资源文件。
  编译运行后结果如下。

MainWindow.png