本节目标:
- 组合Qt功能创建简单GUI应用程序
- 认识布局、信号和槽的概念
从Hello Qt开始
Qt的编译运行过程
//hello.cpp
#include <QApplication>
#include <QLabel>
//argc: argument count argv: argument vector
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QLabel *label=new QLabel("<h2><i>Hello</i><font color=red>Qt</font></h2>");
label->show();
return app.exec();
}
- 头文件包含相关类定义
- 利用Qt自身支持的命令行参数创建QApplication对象
- 对象指针label指向显示“Hello Qt”的QLabel窗口部件(部件 widget:UI中的某个可视化元素,在Win中称 控件 control, 容器 container),标签可以使用HTML表示
- 一般使用QMainWindow、QDialog作为应用程序窗口,窗口会包含QMenuBar、QToolBar、QStatusBar等部件
- show()使部件显示,对部件的设置完成后再显示,避免设置时部件闪烁
-
return app.exec();
传递控制权给Qt
进入事件循环(等待模式)->等待用户动作->动作使程序生成事件(event,如“鼠标按下”事件,在Win中称 消息)->产生响应执行函数。 - 程序的编译和运行:将helllo.cpp置于项目目录hello下,从cmd进入hello目录,命令
qmake project
生成hello.pro项目文件,再用命令qmake hello.pro
生成makefile文件,make
编译后会将可执行文件保存在debug文件夹中。(在cmd中进行编译,注意环境变量冲突问题,例如Qt4和anaconda的qmake混淆)
建立连接
程序如何响应用户动作
//quit.cpp
#include <QApplication>
#include <QPushButton>
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QPushButton *button=new QPushButton("Quit");
QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit()));
button->show();
return app.exec();
}
QObject::connect()
将信号SIGNAL和槽SLOT连接起来,上例中,当button完成clicked后发射信号,槽自动执行其内函数
部件布局
如何利用信号和槽同步部件
如何用布局layout管理部件形状
//
#include <QApplication>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QWidget *window=new QWidget;
window->setWindowTitle("Enter your Age");
QSpinBox *spinBox=new QSpinBox;
spinBox->setRange(0,130);
QSlider *slider=new QSlider(Qt::Horizontal);
slider->setRange(0,130);
QObject::connect(spinBox,SIGNAL(valueChanged(int)),
slider,SLOT(setValue(int)));
QObject::connect(slider,SIGNAL(valueChanged(int)),
spinBox,SLOT(setValue(int)));
spinBox->setValue(35);
QHBoxLayout *layout=new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window->setLayout(layout);
window->show();
return app.exec();
}
-
QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));
关联spinBox部件和slider部件 -
QHBoxLayout *layout=new QHBoxLayout;
定义布局管理器,用addWidget
方法加入部件
Qt构建用户接口的方法:
- 声明所需窗口部件
- 设置部件属性
- 将部件添加到布局中,布局自动设置其位置和大小
- 利用信号和槽连接关联部件行为