美烦资源网

专注技术文章分享,涵盖编程教程、IT 资源与前沿资讯

Qt5 C++入门教程-第6章 创建首个程序

大道至简,在 Qt5 C++入门教程的这一部分,我们要创建首个程序。

我们会展示工具提示和各类鼠标光标,把窗口居中显示在屏幕上,同时介绍信号与槽机制。

简单示例

我们先从一个极为简单的示例开始。

// simple.cpp
#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 编程库中如何创建工具提示。

// tooltip.cpp
#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 窗口部件设置了工具提示,鼠标移动到窗口停留个1秒左右,就会出现提示QWidget,如下图所示。



工具提示

Qt5 光标

光标是一个小图标,用于指示鼠标指针的位置。接下来的示例会展示我们在程序里能够使用的各类光标。

// cursors.cpp
#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();
}

在这个示例中,我们使用了三个frame。每个frame都设置了不同的光标。

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

在接下来的代码示例中,我们会在窗口上显示一个按钮。点击该按钮,应用程序就会关闭。

// pushbutton.cpp
#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 头文件中定义。



加减示例

在本节的最后,我们将展示窗口部件之间如何进行通信。代码被分成了三个文件。

// plusminus.h
#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 宏必须包含在声明了自己的信号和槽的类中。

// plusminus.cpp
#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 方法中,我们确定标签的当前值。标签窗口部件显示的是字符串值,所以我们必须将其转换为整数。我们增加这个数字,然后为标签设置新的文本。我们将数字转换为字符串值。

// main.cpp
#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 中的首个程序。

在代码中添加一个按钮

介绍一些关于Qt的其他编程知识

提供一些关于使用Qt进行图形界面开发的教程

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言