Y 分钟速成 Qt Framework

源代码下载: learnqt-cn.cpp

Qt Qt是一个广为人知的框架,用于开发跨平台软件,该软件可以在各种软件和硬件平台上运行,代码几乎没有变化,同时具有本机应用程序的能力和速度。虽然Qt最初是用C++,但也有其他语言的端口: PyQt, QtRuby, PHP-Qt, 等等.

Qt 非常适合使用图形用户界面 (GUI) 创建应用程序。本教程是关于如何用C++去实现。

/*
 * 让我们从最经典的开始
 */

// Qt框架的所有标头均以大写字母'Q'开头
#include <QApplication>
#include <QLineEdit>

int main(int argc, char *argv[]) {
     // 创建一个对象来管理应用程序范围内的资源
    QApplication app(argc, argv);

    // 创建行编辑widgets并在屏幕上显示
    QLineEdit lineEdit("Hello world!");
    lineEdit.show();

    // 启动应用程序的事件循环
    return app.exec();
}

Qt与 GUI 相关的部分与widgets及其之间的connection有关。

阅读更多有关widgets的信息

/*
 * 让我们创建一个标签和一个按钮。
 * 按下按钮时应显示一个标签。
 * Qt代码本身就可以说明问题。
 */
 
#include <QApplication>
#include <QDialog>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>

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

    QDialog dialogWindow;
    dialogWindow.show();
    
    // 添加垂直布局
    QVBoxLayout layout;
    dialogWindow.setLayout(&layout);  

    QLabel textLabel("Thanks for pressing that button");
    layout.addWidget(&textLabel);
    textLabel.hide();

    QPushButton button("Press me");
    layout.addWidget(&button);
    
    // 按下按钮时显示隐藏标签
    QObject::connect(&button, &QPushButton::pressed,
                     &textLabel, &QLabel::show);

    return app.exec();
}

注意,QObject :: connect部分。 此方法用于将一个对象的SIGNAL连接到另一个对象的SLOTS

Signals 会被发出当对象发生某些事情时,例如当用户按下QPushButton对象时会发出push的信号。

Slots 是可以响应于接收到的信号而执行的action

阅读有关SLOTS和SIGNALS的更多信息

接下来,让我们了解到我们不仅可以使用标准的wigets,而且可以通过继承扩展其行为。 让我们创建一个按钮并计算其被按下的次数。 为此,我们定义了自己的类 CounterLabel 。 由于特定的Qt体系结构,必须在单独的文件中声明它。

// counterlabel.hpp

#ifndef COUNTERLABEL
#define COUNTERLABEL

#include <QLabel>

class CounterLabel : public QLabel {
    Q_OBJECT  // 在每个自定义wiget中必须存在的Qt定义的宏

public:
    CounterLabel() : counter(0) {
        setText("Counter has not been increased yet");  // QLabel方法
    }

public slots:
    // 将响应按钮按下而调用的操作
    void increaseCounter() {
        setText(QString("Counter value: %1").arg(QString::number(++counter)));
    }

private:
    int counter;
};

#endif // COUNTERLABEL
// main.cpp
// 与前面的示例几乎相同

#include <QApplication>
#include <QDialog>
#include <QVBoxLayout>
#include <QPushButton>
#include <QString>
#include "counterlabel.hpp"

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

    QDialog dialogWindow;
    dialogWindow.show();

    QVBoxLayout layout;
    dialogWindow.setLayout(&layout);

    CounterLabel counterLabel;
    layout.addWidget(&counterLabel);

    QPushButton button("Push me once more");
    layout.addWidget(&button);
    QObject::connect(&button, &QPushButton::pressed,
                     &counterLabel, &CounterLabel::increaseCounter);

    return app.exec();
}

当然,Qt框架比本教程介绍的部分要复杂得多,因此请仔细阅读和练习。

进一步阅读

祝你好运,生活愉快!


有建议?或者发现什么错误?在Github上开一个issue,或者发起pull request

原著Aleksey Kholovchuk,并由0个好心人修改。
© 2022 Aleksey Kholovchuk
Translated by: GengchenXU
本作品采用 CC BY-SA 3.0 协议进行许可。


Learn X in Y minutes
Take a whirlwind tour of your next favorite language.
3 声望
2 粉丝
0 条评论
推荐阅读
Y 分钟速成 Git
源代码下载: gitGit 是一个分布式版本控制及源代码管理工具。Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理。版本什么是版本控制版本控制系统就是根据时间来记录一个或多个文件的更改情况的系...

小X学技术阅读 1.2k

如何满速下载百度网盘文件
在我们开心的网上冲浪时,经常会遇到某些资源是用百度网盘储存的,而百度网盘的下载速度经常是1MB以下、几十K、几百K,令人十分着急!!突然,一个 微信公众号 自称软件小妹的大佬出现了,直接为我们带来了一个 油...

小红石1阅读 6.2k

封面图
【精】现代前端框架的重要概念
许多初学者经常会问 “我需要学习哪个框架 ?” 以及 “学习框架前需要掌握多少 JS 或者 TS ?” 无数带有主观色彩的文章都在宣传作者首选框架或库的优势,而不是向读者展示其背后的概念以做出更明智的决定。所以让我...

superZidan1阅读 1.1k

封面图
手把手带你开发starter,点对点带你讲解原理
现在我们就来回忆一下,在还没有Spring-boot框架的时候,我们使用Spring 开发项目,如果需要某一个框架,例如mybatis,我们的步骤一般都是:

京东云开发者3阅读 696

封面图
DBoS 系统说明
程序员TianSong以单片机开发入门,后续又做了 Qt 相关工作,有时间后开始进行 linux 相关的学习,恰巧在二一年十一月份,百问网的韦东山老师进行了三个月的 linux 驱动直播,于是有了开发 DBoS 的念头。

TianSong1阅读 1.2k

poetry 下运行 dbt(qbit)
dbt 是 Data Build Tool 的简称,目前由 dbt labs 公司负责开发和维护,公司的前身是Fishtown Analytics。

qbit阅读 1k

使用 Winget 命令在 Windows 上安装软件
Winget 是微软推出的一款安装包管理工具,使用户能够在命令行下寻找、安装、升级、删除和配置应用程序。这里以安装焰火十二卷(Rickrack)为例,演示了 Winget 的使用流程。

本征喵函数阅读 1k

封面图
3 声望
2 粉丝
宣传栏