QtCreator 和 QtDesigner 的基本应用程序

QtCreator 目前是创建 Qt 应用程序的最佳工具。在这个例子中,我们将看到如何创建一个管理按钮和编写文本的简单 Qt 应用程序。

要创建新应用程序,请单击文件 - >新文件或项目:

StackOverflow 文档

然后选择 Projects-> Application-> Qt Widgets Application

StackOverflow 文档

然后,你可以选择项目的名称和路径:

StackOverflow 文档

接下来,你可以选择要使用的套件。如果你没有任何套件,QtCreator 将使用你的 Qt 版本和你计算机的主编译器创建一个套件。如果你没有任何编译器,则可以安装一个。在 Windows 上:安装 Visual Studio。在 Linux / Mac 上:安装 g ++或 clang ++。

StackOverflow 文档

然后,你可以选择主窗口类的名称,继承的类,与主窗口类对应的文件的名称。如果你正在学习或测试 Qt,你实际上并不需要更改它们。

StackOverflow 文档

最后一步可以是选择该项目的子项目并添加版本控制,如 git 和 svn。如果它仅用于测试,则不需要更改它们。

StackOverflow 文档

然后单击完成按钮。现在你应该在这里:

StackOverflow 文档

这是你的应用程序的基础。如果现在通过单击 Build-> Run 或 ctrl + R(默认情况下)运行它,你将看到一个空窗口。

现在我们将添加一个文本和一个按钮。要做到这一点,我们将使用 Qt Designer。双击 mainwindow.ui 所以现在你应该看到:(如果没有,你会看到一些 xml 文件,点击左边的 Design 按钮)

StackOverflow 文档

在这里 Qt 设计师! 看起来很复杂。但是一旦你习惯它,它真的很棒。我们将添加一些文本和一个按钮。在左侧,有项目列表。你可以单击一个并拖放对象。单击按钮并将其放在窗口中。然后搜索 Label,并执行相同的操作(左上角有一个过滤器,你可以在其中编写你要查找的对象)。

你现在应该有类似的东西:

StackOverflow 文档

通过双击对象,你可以更改它们上的文本。或者,你可以在右下角看到你现在所在对象的属性,并找到 text 属性。你还可以在此处更改名称。

现在,如果你保存并运行(更好地单击编辑按钮然后再次保存以确保你的修改已保存),你将得到:

StackOverflow 文档

咦?为什么我的标签和按钮就像我跑的那样?这是因为我们的中心对象没有布局。顺便说一句,如果你调整主窗口的大小,你可以看到对象保持其位置。所以为了解决它,我们将添加一个布局。让我们说一个垂直布局。因此,从左侧的对象列表中拖放垂直布局。现在你应该看到:

StackOverflow 文档

浮动布局。

所以现在右键单击主窗口,除了标签和按钮之外的任何地方。c \单击布局 - >垂直布局。现在你应该看到你的对象在窗口中垂直对齐。所以现在在布局中移动(再次拖放)你的标签和按钮。现在你应该得到:

StackOverflow 文档

在你的设计师。如果你运行你的应用程序:

StackOverflow 文档

在这里,你可以使用标签和按钮查看你的应用程序。如果你调整窗口大小,标签和按钮也会调整大小。

但我们的按钮仍然无效。我们可以用两种不同的方式改变它。第一种是使用我们创建的方法连接按钮。我们可以使用方法名称 connect 来完成。那么让我们回到我们的代码并转到 mainwindow.cpp 现在添加:

connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(whenButtonIsClicked()));

在你的 MainWindow 的构造函数之后,ui->setupUI(this); 初始化 ui。

然后我们可以在 .cpp 类中创建 MainWindow :: whenButtonIsClicked(),它可以改变标签的文本:

void MainWindow::whenButtonIsClicked()
{
    ui->label->setText("the button has been clicked !");
}

在我们的 mainwindow.h 中,我们需要添加:

public slots:
    void whenButtonIsClicked();

公共时隙意味着可以在接收到信号时调用此方法。当我们点击按钮和一个方法来连接链接信号。

所以现在如果我们运行我们的应用程序并单击按钮,我们得到:

StackOverflow 文档

这意味着我们的连接正在运行。但是使用 Qt Designer,我们有一种更简单的方法。如果你想做另一种方式,删除连接以取消连接按钮(因为我们将以不同方式连接它),返回 mainwindow.ui 并右键单击按钮。单击 Go to slot …,选择 clicked() 并按 ok。

StackOverflow 文档

然后你应该转移到这个功能:

void MainWindow::on_pushButton_clicked()
{
}

这是单击按钮时将调用的函数。所以你可以添加

ui->label->setText("it's even easier !");

进去。转到 mainwindow.h 保存更改(当你转到插槽时,它会创建一个与你要求的信号相关联的方法。它在 .h 中定义函数但是不保存它。所以你应该去到文件并保存)。

现在,当你运行应用程序并按下按钮时,你可以看到新消息(如果你仍然看到旧消息,则表明你没有删除连接)。

StackOverflow 文档

我们也可以在我们的标签中添加一个 int,double 等,这要归功于 QVariant,这是一个很棒的类,它可以在很多其他东西中转换很多东西。所以左边添加一个 int,当我们按下按钮时会增加。

那么 .h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void whenButtonIsClicked();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow  *ui;
    double          _smallCounter;
};

#endif // MAINWINDOW_H

.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//    connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(whenButtonIsClicked()));
    _smallCounter = 0.0f;
}

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

void MainWindow::whenButtonIsClicked()
{
    ui->label->setText("the button has been clicked !");
}

void MainWindow::on_pushButton_clicked()
{
    _smallCounter += 0.5f;
    ui->label->setText("it's even easier ! " + QVariant(_smallCounter).toString());
}

现在,我们可以再次保存并运行。每次单击按钮,它都会显示“它更容易!”,其值为_smallCounter。所以你应该有类似的东西:

StackOverflow 文档

本教程已完成。如果你想了解有关 Qt 的更多信息,让我们在 StackOverflow 文档Qt 文档中查看 Qt 的其他示例和文档。