Qt学习(17)——第一个Qt GUI程序

显示应用程序图标,工具提示和各种鼠标光标。我们在屏幕上居中放置一个窗口并引入信号和信号槽机制。
执行完qmake -project之后,要在*.pro最后一行加上QT += widgets

简单GUI

从一个简单的窗口开始。

// simple.cpp
// 包含GUI应用必须的头文件
#include <QApplication>
#include <QWidget>

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

    // 这是application对象。
    // 每个qt5应用程序都必须创建该对象。(控制台应用程序除外)。
    QApplication app(argc, argv);

    // 这是我们的主要部件。
    QWidget window;

    // 在这种情况下,QWidget是我们的主窗口。
    // 调整窗口小部件的大小 
    window.resize(250, 150);
    // 为主窗口设置一个标题
    window.setWindowTitle("Simple example");
    // 在屏幕上显示小部件。
    window.show();

    // exec()方法是应用程序的主循环。
    return app.exec();
}

该示例在屏幕上显示了一个基本窗口。

工具提示

工具提示是关于应用程序中项目的特定提示。以下示例将演示如何在Qt5编程库中创建工具提示。

// tooltip.cpp
#include <QApplication>
#include <QWidget>

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

  QApplication app(argc, argv);  

  QWidget window;

  window.resize(250, 150);
  window.move(300, 300);
  // 使用setToolTip()方法为QWidget 部件设置工具提示。
  window.setWindowTitle("ToolTip");
  window.setToolTip("QWidget");
  window.show();

  return app.exec();
}

该示例显示了QWidget的工具提示。

应用图标

在下一个示例中,我们将显示应用程序图标。大多数窗口管理器都会在标题栏的左下角以及任务栏上显示图标。

// #include <QApplication>
#include <QWidget>
#include <QIcon>

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

  QApplication app(argc, argv);  

  QWidget window;

  window.resize(250, 150);
  window.setWindowTitle("Icon");
  // 使用setWindowIcon()方法和QIcon类显示图标。
  // 该图标是位于当前工作目录中的一个小型png文件。
  window.setWindowIcon(QIcon("web.png"));
  window.show();

  return app.exec();
}

在任务栏显示图标,不知道为什么,我这里在左上角没有logo。

游标

光标是指示鼠标指针位置的小图标。在下一个示例中将显示我们可以在我们的程序中使用的各种游标。

// cursors.cpp
#include <QApplication>
#include <QWidget>
#include <QFrame>
#include <QGridLayout>

class Cursors : public QWidget {

 public:
     Cursors(QWidget *parent = 0);
};

Cursors::Cursors(QWidget *parent)
    : QWidget(parent) {

  // 创建QFrame部件
  QFrame *frame1 = new QFrame(this);
  // 我们使用setFrameStyle()方法设置框架样式。这样可以看到框架的边界。
  frame1->setFrameStyle(QFrame::Box);
  // 使用setCursor()方法将光标设置为帧。
  frame1->setCursor(Qt::SizeAllCursor);

  QFrame *frame2 = new QFrame(this);
  frame2->setFrameStyle(QFrame::Box);
  frame2->setCursor(Qt::WaitCursor);

  QFrame *frame3 = new QFrame(this);
  frame3->setFrameStyle(QFrame::Box);
  frame3->setCursor(Qt::PointingHandCursor);

  // 这将把所有的框架分成一行。将在布局管理一章中详细讨论这个问题。
  QGridLayout *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();
}

在这个例子中,我们使用三个帧。每个帧都有不同的光标集。

QPushButton

在下一个代码示例中,我们在窗口上显示一个按钮。通过点击按钮,我们关闭应用程序。

// pushbutton.cpp
#include <QApplication>
#include <QWidget>
#include <QPushButton>

class MyButton : public QWidget {

 public:
     MyButton(QWidget *parent = 0);
};

MyButton::MyButton(QWidget *parent)
    : QWidget(parent) {
  // 创建一个新的QPushButton。
  // 手动调整它的大小并使用setGeometry()方法将它放在窗口上。         
  QPushButton *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();
}

在这个代码示例中,我们首次使用了信号和信号槽的概念。

  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 = 0);

  private slots:
    void OnPlus();
    void OnMinus();

  private:
    QLabel *lbl;

};

这是该示例的头文件。在这个文件中,我们定义了两个信号槽和一个label部件。

class PlusMinus : public QWidget {

  Q_OBJECT
...  

Q_OBJECT宏必须包含在声明自己的信号和信号槽的类中。

// plusminus.cpp
#include "plusminus.h"
#include <QGridLayout>

PlusMinus::PlusMinus(QWidget *parent)
    : QWidget(parent) {

  QPushButton *plsBtn = new QPushButton("+", this);
  QPushButton *minBtn = new QPushButton("-", this);
  lbl = new QLabel("0", this);

  QGridLayout *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));
}

有两个按钮和一个label部件,用按钮增加或减少标签显示的数字。

void PlusMinus::OnPlus() {

  int val = lbl->text().toInt();
  val++;
  lbl->setText(QString::number(val));
}

OnPlus()方法中,我们确定标签的当前值。label部件显示一个字符串值,所以必须将其转换为整数。增加数字并为标签设置一个新文本,然后将一个数字转换为字符串值。

// 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();
}

这是代码示例的主要文件。

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值