以 “Hello Qt” 为例,介绍怎么着建立八个 Qt 工程 。

  以 “Hello Qt” 为例,介绍怎样树立1个 Qt 工程 。

1  QLabel 例程

  QLabel 用来彰显文本和图纸,它接二连三自 QFrame (而 QFrame 继承自 QWidget)

1  QLabel 例程

  QLabel 用来展现文本和图表,它一连自 QFrame (而 QFrame 继承自 QWidget)

1.1  Hello Qt

  #1 和 #2 标明头文件,也可用3个总的来代替: #include <QtWidgets>

  #6 创建 QApplication 类对象,配合 #11
使全数程序进入事件循环境情形况,等待用户的动作;

  #8 创造 QLabel 对象 label 并赋初值 “Hello Qt!”, 接着 #9
呈现出该指标。

 1 #include <QApplication>
 2 #include <QLabel>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication app(argc, argv);
 7 
 8     QLabel label("Hello Qt!");
 9     label.show();
10 
11     return app.exec();
12 }

  自动生成的工程布置文件 .pro 如下:

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = HelloQt
TEMPLATE = app

SOURCES += main.cpp

  支持 HTML 风格

QLabel label("<h2><i>Hello</i>" "<font color=red>Qt!</font></h2>");

  爱博体育 1

1.1  Hello Qt

  #爱博体育,1 和 #2 标明头文件,也可用二个总的来代替: #include <QtWidgets>

  #6 创建 QApplication 类对象,配合 #11
使全体程序进入事件循环境情况况,等待用户的动作;

  #8 创设 QLabel 对象 label 并赋初值 “Hello Qt!”, 接着 #9
显示出该目的。

 1 #include <QApplication>
 2 #include <QLabel>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication app(argc, argv);
 7 
 8     QLabel label("Hello Qt!");
 9     label.show();
10 
11     return app.exec();
12 }

  自动生成的工程安插文件 .pro 如下:

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = HelloQt
TEMPLATE = app

SOURCES += main.cpp

  支持 HTML 风格

QLabel label("<h2><i>Hello</i>" "<font color=red>Qt!</font></h2>");

 
爱博体育 2

1.2  智能指针

  上边程序因为简短,关闭后,操作系统会承受回收内部存款和储蓄器,不过那种 new 明白后不 delete 的法门是不推荐的。

8  QLabel *label = new QLabel("Hello Qt!");
9  label->show(); 

1.2  智能指针

  上边程序因为简短,关闭后,操作系统会负担回收内部存款和储蓄器,不过那种 new 掌握后不 delete 的法子是不引进的。

8  QLabel *label = new QLabel("Hello Qt!");
9  label->show(); 

1)  Qt 的智能指针

  若是选择指针,能够考虑 Qt 中的智能指针
QScopedPointer

 QScopedPointer<QLabel> label(new QLabel("Hello Qt!"));

1)  Qt 的智能指针

  假使利用指针,能够设想 Qt 中的智能指针
QScopedPointer

 QScopedPointer<QLabel> label(new QLabel("Hello Qt!"));

2)  c++ 的智能指针

  也可利用 c++ 中的智能指针
std::unique_ptr,注意包括头文件 #include <memory>

std::unique_ptr<QLabel> label = std::make_unique<QLabel>("Hello Qt!");

  

2)  c++ 的智能指针

  也可接纳 c++ 中的智能指针
std::unique_ptr,注意蕴涵头文件 #include <memory>

std::unique_ptr<QLabel> label = std::make_unique<QLabel>("Hello Qt!");

  

2  QPushButton 例程

  使用 QPushButton 类,新建一个按钮指针 btn,设置其父窗口为
&window,这样当 window 被灭绝,就会自动删除 btn,这其实是 Qt 中故意的“拥有权”难题,它可使编制程序中 new
了不要 delete

  connect 将信号 clicked() 和槽函数 quit()
连接了起来,当点击按钮时,clicked()
信号被产生,接着槽函数被实践,于是程序退出。那称为 “信号槽” 机制。

 1 #include <QtWidgets>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     QApplication app(argc, argv);
 6 
 7     QWidget window;
 8     window.resize(200, 150);
 9     window.setWindowTitle("Button");
10     window.show();
11 
12     QPushButton *btn = new QPushButton("Quit", &window);
13     QObject::connect(btn, SIGNAL(clicked()), &app, SLOT(quit()));
14     btn->move(50,50);
15     btn->show();
16 
17     return app.exec();
18 }

  界面如下:

  爱博体育 3

 

2  QPushButton 例程

  使用 QPushButton 类,新建二个按钮指针 btn,设置其父窗口为
&window,那样当 window 被销毁,就会活动删除 btn,那实际是 Qt 中故意的“拥有权”难题,它可使编程中 new
了不用 delete

  connect 将信号 clicked() 和槽函数 quit()
连接了起来,当点击按钮时,clicked()
信号被发生,接着槽函数被实施,于是程序退出。那称为 “信号槽” 机制。

 1 #include <QtWidgets>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     QApplication app(argc, argv);
 6 
 7     QWidget window;
 8     window.resize(200, 150);
 9     window.setWindowTitle("Button");
10     window.show();
11 
12     QPushButton *btn = new QPushButton("Quit", &window);
13     QObject::connect(btn, SIGNAL(clicked()), &app, SLOT(quit()));
14     btn->move(50,50);
15     btn->show();
16 
17     return app.exec();
18 }

  界面如下:

 
爱博体育 4

 

3  QSpinBox 和 QSlider

  完毕如下界面,包涵 spinbox 和 slider
七个控件,且两岸的数值相互关联。
  爱博体育 5 

    #1 ~ #4 包涵所需头文件,#10 和 #11 新建窗口部件,作为顶层窗口
(top-level), #13 ~ #16 新建 spinbox 和 slider 控件指针,取值范围
0~130;

    #18 和 #19 将两者连接起来, 使得 spinbox 和 slider
的数值保持实时同步; #22 新建 layout 布局管理器指针;

    #23 和 #24 将几个控件插手布局管理器 layout 中, #26
在窗体部件上安装布局管理器 layout,此时 QH博克斯Layout 以及它富含的
QSpinBox 和 QSlider 会自动 “重新定义” 父窗口,QWidget
会取得它们的全部权,那也是它们在创顿前卫未安装父窗口的由来; #27
呈现出总体窗体部件。

 1 #include <QApplication>    // #include <QtWidgets>
 2 #include <QHBoxLayout>     
 3 #include <QSpinBox>
 4 #include <QSlider>   
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     QApplication app(argc, argv);
 9 
10     QWidget window;
11     window.setWindowTitle("Enter Your Age");
12 
13     QSpinBox *spin = new QSpinBox;
14     QSlider *slider = new QSlider(Qt::Horizontal);
15     spin->setRange(0,130);
16     slider->setRange(0,130);
17 
18     QObject::connect(spin, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
19     QObject::connect(slider, SIGNAL(valueChanged(int)), spin, SLOT(setValue(int)));
20     spin->setValue(35);
21 
22     QHBoxLayout *layout = new QHBoxLayout;
23     layout->addWidget(spin);
24     layout->addWidget(slider);
25 
26     window.setLayout(layout);
27     window.show();
28 
29     return app.exec();
30 }

  Qt 中有八个布局管理器类,分别是程度布局管理器 (QHBoxLayout),
垂直布局管理器 (QVBoxLayout), 以及网格布局管理器 (QGridLayout)

 
这几个布局管理器,能够为进入个中的控件自动分配职责和尺寸大小,省却了手动布局画图的麻烦。

 

3  QSpinBox 和 QSlider

  达成如下界面,包含 spinbox 和 slider
七个控件,且两岸的数值相互关联。
 
爱博体育 6 

    #1 ~ #4 包涵所需头文件,#10 和 #11 新建窗口部件,作为顶层窗口
(top-level), #13 ~ #16 新建 spinbox 和 slider 控件指针,取值范围
0~130;

    #18 和 #19 将双方连接起来, 使得 spinbox 和 slider
的数值保持实时同步; #22 新建 layout 布局管理器指针;

    #23 和 #24 将八个控件加入布局管理器 layout 中, #26
在窗体部件上设置布局管理器 layout,此时 QHBoxLayout 以及它含有的
QSpinBox 和 QSlider 会自动 “重新定义” 父窗口,QWidget
会取得它们的全部权,那也是它们在创造时并未安装父窗口的因由; #27
显示出全方位窗体部件。

 1 #include <QApplication>    // #include <QtWidgets>
 2 #include <QHBoxLayout>     
 3 #include <QSpinBox>
 4 #include <QSlider>   
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     QApplication app(argc, argv);
 9 
10     QWidget window;
11     window.setWindowTitle("Enter Your Age");
12 
13     QSpinBox *spin = new QSpinBox;
14     QSlider *slider = new QSlider(Qt::Horizontal);
15     spin->setRange(0,130);
16     slider->setRange(0,130);
17 
18     QObject::connect(spin, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
19     QObject::connect(slider, SIGNAL(valueChanged(int)), spin, SLOT(setValue(int)));
20     spin->setValue(35);
21 
22     QHBoxLayout *layout = new QHBoxLayout;
23     layout->addWidget(spin);
24     layout->addWidget(slider);
25 
26     window.setLayout(layout);
27     window.show();
28 
29     return app.exec();
30 }

  Qt 中有四个布局管理器类,分别是程度布局管理器 (QHBoxLayout),
垂直布局管理器 (QVBoxLayout), 以及网格布局管理器 (QGridLayout)

 
这么些布局管理器,能够为进入当中的控件自动分配职务和尺寸大小,省却了手动布局画图的累赘。

 

参考资料:

  <C++ GUI Programming with Qt4>  2nd chapter 1

  <Qt 5.9 | All Qt Examples> Widgets
Tutorial – Child Widgets

  <Qt 学习之路2>  豆子  
https://www.devbean.net/2012/08/qt-study-road-2-hello-world/

参考资料:

  <C++ GUI Programming with Qt4>  2nd chapter 1

  <Qt 5.9 | All Qt Examples> Widgets
Tutorial – Child Widgets

  <Qt 学习之路2>  豆子  
https://www.devbean.net/2012/08/qt-study-road-2-hello-world/