目录
1.1 什么是Qt
1.3 Qt5开发步骤及实例
main()函数相关内容:
dialog.h文件如下:
dialog.cpp文件如下:
补充:
1.伙伴关系编辑:
2.信号与槽机制
3.Qt5元对象系统
4.布局管理器
Qt是跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建设艺术级图形用户界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
下面以完成计算圆面积功能这个简单例子来介绍Qt开发程序的流程,其中涉及Qt应用程序用户界面中的事件关联操作内容——信号与槽机制(Signal & Slot)。
下面以代码实现这个例子:
#include "dialog.h" //a
#include //b
int main(int argc, char *argv[]) //c
{
QApplication a(argc, argv); //d
Dialog w; //创建一个对话框对象
w.show(); //e
return a.exec(); //f
}
其中:
(a)#include "dialog.h":包含了程序中要完成功能的Dialog类的定义,在Dialog类中封装完成所需的功能。注意,使用哪个类就必须包含该类的头文件引用过来。
(b)#include
(c)int main(int argc, char *argv[]):应用程序的入口。所有的Qt程序都必须有且只有一个main()函数。参数argc是命令行变量的数量,argv是命令行变量的数组。
(d)QApplication a(argc, argv):a是这个程序QApplication对象。在任何Qt的窗口中系统部件被使用之前必须建立QApplication对象。它在这里被创建并处理这些命令行变量。所以被Qt识别的命令行参数都将从argv中被移去(并且argc也因此减少)。
(e)w.show():当创建一个窗口部件的时候,默认是不可见的,必须调用show()函数。
(f)return a.exec():程序进入消息循环,等待可以输入进行响应。
#ifndef DIALOG_H
#define DIALOG_H
#include
#include
#include
#include
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void showArea();//槽函数,显示面积
private:
//所需要的部件
QLabel * radiusLabel;
QLabel * areaLabel1;
QLabel * areaLabel2;
QLineEdit * radiusLE;
QPushButton * count;
QLabel * ageLabel;
QLineEdit * ageLineEdit;
};
#endif // DIALOG_H
#include "dialog.h"
#include //网格布局
const static double PI = 3.1416; //定义全局变量PI
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
radiusLabel = new QLabel(tr("半径:"));//新建一个QLabel对象,text--半径:
radiusLE = new QLineEdit(this); //新建一个QLineEdit对象,用来输入半径大小
areaLabel1 = new QLabel(tr("面积:")); //新建一个QLabel对象,text--面积:
areaLabel2 = new QLabel(this); //新建一个QLabel对象
count = new QPushButton(this); //新建一个QPushbutton对象,发送clicked信号
count->setText(tr("计算"));
QGridLayout * mainLayout = new QGridLayout(this); //网格布局
mainLayout->addWidget(radiusLabel,0,0); //放在第一行第一个
mainLayout->addWidget(radiusLE,0,1);
mainLayout->addWidget(areaLabel1,1,0);
mainLayout->addWidget(areaLabel2,1,1);
mainLayout->addWidget(count,2,1);
setLayout(mainLayout); //设置布局
//方式一 点击按钮的方式
//connect(count,SIGNAL(clicked()),this,SLOT(showArea()));
//方式二 在lineedit输入直接在label上显示
connect(radiusLE,SIGNAL(textChanged(QString)),this,SLOT(showArea()));
}
Dialog::~Dialog()
{
}
void Dialog::showArea()
{
bool ok; //布尔值
QString trmpStr; //临时存储
QString valueStr = radiusLE->text(); //获取LineEdit的文本
int valueInt = valueStr.toInt(&ok); //QString类型转化为int类型
double area = valueInt*valueInt*PI; //计算
areaLabel2->setText(trmpStr.setNum(area)); //把数值传给label
}
只有QLabel标签对象才可以有伙伴窗口部件,也只有在该QLabel对象具有快捷键(在显示文本的某个字符前面添加一个前缀”&“,就可以定义快捷键)时,伙伴关系才有效。例如:
QLineEdit* ageLineEdit = new QLineEdit(this);
QLabel* ageLabel = new QLabel("&Age",this);
ageLabel->setBuddy(ageLineEdit);
代码定义了ageLable标签的组合键为Alt+A,并将行编辑框ageLineEdit设为它的伙伴窗口部件。当用户按下Alt+A组合键时,焦点会跳到行编辑框中。
优点:类型安全、松散耦合。
Qt5元对象系统提供了对象间的通讯机制、运行时类型信息和动态属性系统的支持,是标准C++的一个扩展,它使Qt更好的实现GUI图形用户界面编程。
Qt5元对象系统基于以下三个事实。
(1)基类QObject:任何需要使用元对象系统功能的类必须继承自QObjec。
(2)Q_OBJECT宏:Q_OBJECT宏必须出现在类私有声明区中,用于驱动元对象的特性。
(3)元对象编辑器moc:为QObject子类实现元对象特性提供必要的代码实现。
管理部件的布局排列。看后续。