Qt5 中的第一个程序
最后修改于 2023 年 10 月 18 日
在本 Qt5 C++ 编程教程中,我们将创建我们的第一个程序。
我们显示一个工具提示和各种鼠标光标。 我们将窗口居中于屏幕上,并介绍信号和槽机制。
简单示例
我们从一个非常简单的例子开始。
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
window.resize(250, 150);
window.setWindowTitle("Simple example");
window.show();
return app.exec();
}
该示例在屏幕上显示一个基本窗口。
#include <QApplication> #include <QWidget>
我们包含了必要的头文件。
QApplication app(argc, argv);
这是应用程序对象。 每个 Qt5 应用程序都必须创建此对象。(控制台应用程序除外。)
QWidget window;
这是我们的主小部件。
window.resize(250, 150);
window.setWindowTitle("Simple example");
window.show();
在这里,我们调整小部件的大小并为我们的主窗口设置标题。 在这种情况下,QWidget 是我们的主窗口。 最后,我们在屏幕上显示该小部件。
return app.exec();
exec 方法启动应用程序的主循环。
工具提示
工具提示是关于应用程序中项目的特定提示。 以下示例将演示如何在 Qt5 编程库中创建工具提示。
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
window.resize(350, 250);
window.setWindowTitle("ToolTip");
window.setToolTip("QWidget");
window.show();
return app.exec();
}
该示例显示了主 QWidget 的工具提示。
window.setWindowTitle("ToolTip");
我们使用 setToolTip 方法为 QWidget 小部件设置工具提示。
Qt5 光标
光标是一个小图标,指示鼠标指针的位置。 在下一个示例中,我们将展示我们可以在程序中使用的各种光标。
#include <QApplication>
#include <QWidget>
#include <QFrame>
#include <QGridLayout>
class Cursors : public QWidget {
public:
Cursors(QWidget *parent = nullptr);
};
Cursors::Cursors(QWidget *parent)
: QWidget(parent) {
auto *frame1 = new QFrame(this);
frame1->setFrameStyle(QFrame::Box);
frame1->setCursor(Qt::SizeAllCursor);
auto *frame2 = new QFrame(this);
frame2->setFrameStyle(QFrame::Box);
frame2->setCursor(Qt::WaitCursor);
auto *frame3 = new QFrame(this);
frame3->setFrameStyle(QFrame::Box);
frame3->setCursor(Qt::PointingHandCursor);
auto *grid = new QGridLayout(this);
grid->addWidget(frame1, 0, 0);
grid->addWidget(frame2, 0, 1);
grid->addWidget(frame3, 0, 2);
setLayout(grid);
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Cursors window;
window.resize(350, 150);
window.setWindowTitle("Cursors");
window.show();
return app.exec();
}
在此示例中,我们使用三个框架。 每个框架都设置了不同的光标。
auto *frame1 = new QFrame(this);
创建了一个 QFrame 小部件。
frame1->setFrameStyle(QFrame::Box);
我们使用 setFrameStyle 方法设置框架样式。 这样我们就可以看到框架的边界。
frame1->setCursor(Qt::SizeAllCursor);
使用 setCursor 方法将光标设置为框架。
auto *grid = new QGridLayout(this); grid->addWidget(frame1, 0, 0); grid->addWidget(frame2, 0, 1); grid->addWidget(frame3, 0, 2); setLayout(grid);
这将把所有框架分组到一行中。 我们将在布局管理章节中详细讨论这个问题。
Qt5 QPushButton
在下一个代码示例中,我们在窗口上显示一个按钮。 单击该按钮即可关闭应用程序。
#include <QApplication>
#include <QWidget>
#include <QPushButton>
class MyButton : public QWidget {
public:
MyButton(QWidget *parent = nullptr);
};
MyButton::MyButton(QWidget *parent)
: QWidget(parent) {
auto *quitBtn = new QPushButton("Quit", this);
quitBtn->setGeometry(50, 40, 75, 30);
connect(quitBtn, &QPushButton::clicked, qApp, &QApplication::quit);
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyButton window;
window.resize(250, 150);
window.setWindowTitle("QPushButton");
window.show();
return app.exec();
}
在此代码示例中,我们第一次使用信号和槽的概念。
auto *quitBtn = new QPushButton("Quit", this);
quitBtn->setGeometry(50, 40, 75, 30);
我们创建一个新的 QPushButton。 我们手动调整它的大小,并使用 setGeometry 方法将其放置在窗口上。
connect(quitBtn, &QPushButton::clicked, qApp, &QApplication::quit);
当我们单击该按钮时,会生成一个 clicked 信号。 槽是响应信号的方法。 在我们的例子中,它是主应用程序对象的 quit 槽。 qApp 是指向应用程序对象的全局指针。 它在 QApplication 头文件中定义。
加减
我们结束本节,展示小部件如何进行通信。 代码分为三个文件。
#pragma once
#include <QWidget>
#include <QApplication>
#include <QPushButton>
#include <QLabel>
class PlusMinus : public QWidget {
Q_OBJECT
public:
PlusMinus(QWidget *parent = nullptr);
private slots:
void OnPlus();
void OnMinus();
private:
QLabel *lbl;
};
这是该示例的头文件。 在此文件中,我们定义了两个槽和一个标签小部件。
class PlusMinus : public QWidget {
Q_OBJECT
...
Q_OBJECT 宏必须包含在声明其自己的信号和槽的类中。
#include "plusminus.h"
#include <QGridLayout>
PlusMinus::PlusMinus(QWidget *parent)
: QWidget(parent) {
auto *plsBtn = new QPushButton("+", this);
auto *minBtn = new QPushButton("-", this);
lbl = new QLabel("0", this);
auto *grid = new QGridLayout(this);
grid->addWidget(plsBtn, 0, 0);
grid->addWidget(minBtn, 0, 1);
grid->addWidget(lbl, 1, 1);
setLayout(grid);
connect(plsBtn, &QPushButton::clicked, this, &PlusMinus::OnPlus);
connect(minBtn, &QPushButton::clicked, this, &PlusMinus::OnMinus);
}
void PlusMinus::OnPlus() {
int val = lbl->text().toInt();
val++;
lbl->setText(QString::number(val));
}
void PlusMinus::OnMinus() {
int val = lbl->text().toInt();
val--;
lbl->setText(QString::number(val));
}
我们有两个按钮和一个标签小部件。 我们使用按钮增加或减少标签显示的数字。
connect(plsBtn, &QPushButton::clicked, this, &PlusMinus::OnPlus); connect(minBtn, &QPushButton::clicked, this, &PlusMinus::OnMinus);
在这里,我们将 clicked 信号连接到它们的槽。
void PlusMinus::OnPlus() {
int val = lbl->text().toInt();
val++;
lbl->setText(QString::number(val));
}
在 OnPlus 方法中,我们确定标签的当前值。 标签小部件显示一个字符串值,因此我们必须将其转换为整数。 我们增加数字并为标签设置新文本。 我们将数字转换为字符串值。
#include "plusminus.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
PlusMinus window;
window.resize(300, 190);
window.setWindowTitle("Plus minus");
window.show();
return app.exec();
}
这是代码示例的主文件。
在本章中,我们创建了 Qt5 中的第一个程序。