From 90bf6e66435f705189b211f73a579ad55448e810 Mon Sep 17 00:00:00 2001 From: "Mr.Xu" Date: Wed, 22 Jul 2020 17:35:08 +0800 Subject: [PATCH 1/3] Create qt-cn.html.markdown --- zh-cn/qt-cn.html.markdown | 160 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 zh-cn/qt-cn.html.markdown diff --git a/zh-cn/qt-cn.html.markdown b/zh-cn/qt-cn.html.markdown new file mode 100644 index 00000000..6edb94e9 --- /dev/null +++ b/zh-cn/qt-cn.html.markdown @@ -0,0 +1,160 @@ +--- +category: tool +tool: Qt Framework +language: c++ +filename: learnqt.cpp +contributors: + - ["Aleksey Kholovchuk", "https://github.com/vortexxx192"] + translators: + - ["GengchenXU", "https://github.com/GengchenXU"] +lang: zh-cn + +--- + +**Qt** Qt是一个广为人知的框架,用于开发跨平台软件,该软件可以在各种软件和硬件平台上运行,代码几乎没有变化,同时具有本机应用程序的能力和速度。虽然**Qt**最初是用*C*++,但也有其他语言的端口: *[PyQt](https://learnxinyminutes.com/docs/pyqt/)*, *QtRuby*, *PHP-Qt*, 等等. + +**Qt** 非常适合使用图形用户界面 (GUI) 创建应用程序。本教程是关于如何用*C++*去实现。 + +```c++ +/* + * 让我们从最经典的开始 + */ + +// Qt框架的所有标头均以大写字母'Q'开头 +#include +#include + +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的信息](http://doc.qt.io/qt-5/qtwidgets-index.html) + +```c++ +/* + * 让我们创建一个标签和一个按钮。 + * 按下按钮时应显示一个标签。 + * Qt代码本身就可以说明问题。 + */ + +#include +#include +#include +#include +#include + +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的更多信息](http://doc.qt.io/qt-5/signalsandslots.html) + + +接下来,让我们了解到我们不仅可以使用标准的wigets,而且可以通过继承扩展其行为。 让我们创建一个按钮并计算其被按下的次数。 为此,我们定义了自己的类* CounterLabel *。 由于特定的Qt体系结构,必须在单独的文件中声明它。 + +```c++ +// counterlabel.hpp + +#ifndef COUNTERLABEL +#define COUNTERLABEL + +#include + +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 +``` + +```c++ +// main.cpp +// 与前面的示例几乎相同 + +#include +#include +#include +#include +#include +#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框架比本教程介绍的部分要复杂得多,因此请仔细阅读和练习。 + +## 进一步阅读 +- [Qt 4.8 tutorials](http://doc.qt.io/qt-4.8/tutorials.html) +- [Qt 5 tutorials](http://doc.qt.io/qt-5/qtexamplesandtutorials.html) + +祝你好运,生活愉快! \ No newline at end of file From 4eb3a50309017f9f2080a87c1ff8023e03bd2a84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=B3=E4=BD=BF=E5=AD=A4=E7=8B=AC=E4=BE=9D=E6=97=A7?= =?UTF-8?q?=E5=89=8D=E8=A1=8C?= <56543168+GengchenXU@users.noreply.github.com> Date: Wed, 22 Jul 2020 17:38:44 +0800 Subject: [PATCH 2/3] Update qt-cn.html.markdown --- zh-cn/qt-cn.html.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh-cn/qt-cn.html.markdown b/zh-cn/qt-cn.html.markdown index 6edb94e9..10602407 100644 --- a/zh-cn/qt-cn.html.markdown +++ b/zh-cn/qt-cn.html.markdown @@ -5,7 +5,7 @@ language: c++ filename: learnqt.cpp contributors: - ["Aleksey Kholovchuk", "https://github.com/vortexxx192"] - translators: +translators: - ["GengchenXU", "https://github.com/GengchenXU"] lang: zh-cn @@ -157,4 +157,4 @@ int main(int argc, char *argv[]) { - [Qt 4.8 tutorials](http://doc.qt.io/qt-4.8/tutorials.html) - [Qt 5 tutorials](http://doc.qt.io/qt-5/qtexamplesandtutorials.html) -祝你好运,生活愉快! \ No newline at end of file +祝你好运,生活愉快! From 587873df7fcd4b2e52c1d3c88fa4f449d3b8e4c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=B3=E4=BD=BF=E5=AD=A4=E7=8B=AC=E4=BE=9D=E6=97=A7?= =?UTF-8?q?=E5=89=8D=E8=A1=8C?= Date: Tue, 20 Oct 2020 23:22:15 +0800 Subject: [PATCH 3/3] Update zh-cn/qt-cn.html.markdown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 谭九鼎 <109224573@qq.com> --- zh-cn/qt-cn.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh-cn/qt-cn.html.markdown b/zh-cn/qt-cn.html.markdown index 10602407..8681c85b 100644 --- a/zh-cn/qt-cn.html.markdown +++ b/zh-cn/qt-cn.html.markdown @@ -2,7 +2,7 @@ category: tool tool: Qt Framework language: c++ -filename: learnqt.cpp +filename: learnqt-cn.cpp contributors: - ["Aleksey Kholovchuk", "https://github.com/vortexxx192"] translators: