/* Copyright 夜流冰 */
QT版本5.14.1, QT Creator 4.11.1.
1,打开QT Creator
2,Project -> New,填写项目名和路径。
3,选择Application -> Qt Widgets Application
4,选择构建类型:qmake,cmake,Qbs的一种。
5,更改类名,相应的源文件的名字也会更改。注意勾选“Generate form” (创建界面),才能使用界面设计器。
6,Base class选择,有QMainWindows,QWidget,QDialog。
7,翻译文件,可以先不选。
8,选择工具链(Kit Selection),这里笔者安装的是Desktop Qt 5.14.2 MSVC2017 64bit
9,配置子项目选择和版本控制系统,如无需要略过。
10,点击完成。
关于基类的选择,在QTCreator的help->Index中搜索相关内容:QMainWindow ,QWidget,QDialog。
QMainWindow和QDialog继承QWidget,QWidget继承QObject 和QPaintDevice。
QWidget是Qt中的窗口基类,QDialog是一个对话框,QMainWindow是一个程序的标准界面。
关于QMainWindow的界面形式参见下图:
--------------------------------------------
按照上面介绍的步骤,创建一个名为Diaglog的项目,基类选择QDialog。
在编辑视图下,项目显示模式,看到有main.cpp和Dialog.cpp,Dialog.h文件。
main.cpp里是这样的:
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
1,先包含的是“dialog.h”,是我们创建的类,下面要引用。
2,包含<QApplication>, 这个是Application类的定义,每个使用Qt图形化应用程序中都必须使用一个QApplication对象。它管理各种资源,设置,控制流及事件处理。
3,然后是main函数,应用程序的入口。使用Qt时,main函数只需将控制转交给Qt库之前执行初始化。然后Qt库通过事件向程序告知用户的行为。
4,QApplication a(argc, argv), a 是这个程序的QApplication对象。在任何Qt的窗口系统部件被使用之前必须创建QApplication对象,并处理main函数传过来的参数。
5,w.show( ),当创建一个窗口部件的时候,默认它是不可见的,必须调用show( ) 函数使他变为可见。
6,return a.exec( ); 程序进入消息循环,等待可能的输入进行响应。这里就是main函数将控制权交给Qt。当程序退出,exec函数就会返回。
在exec函数中,Qt接收并处理用户和系统的事件,并且将它们传递给适当的窗口部件。
下一步,我们就要对我们的Diaglog窗口类进行编辑。
我们直接使用界面设计器来做,这个和C#等IDE类似,所见即所得,直接将控件拖动到编辑区域。
1,双击ui文件,会进入设计界面,Qt Designer。
2,拖曳控件容器栏的滚动条,找到里面的Label / button等控件,放入中间的编辑框中,选择合适位置。
比如放入一个push button,可用于提交响应单击事件。
3,修改控件的属性,比如控件的名字,控件的显示文字等。在对象查看器里改名字,在属性编辑器里改属性。
4,Ctrl + R,运行,查看界面运行效果。OK后关闭程序,继续编辑。
5,同C#等IDE类似,在控件上点击鼠标右键,选择“转到槽...”命令,然后选择相应的信号(类似C#里面的事件,比如按键按下事件)。
6,选中后会创建相应的信号或事件的槽函数,然后进行编程。
7,对界面设计进行编辑后,会自动生成一个头文件:ui_dialog.h,这里定义了界面布局,里面包含了各个控件的引用。
如果要访问控件的内容,可以在dialog.cpp的槽函数中,使用代码: ui->mylable.text( );
注意,Qt和.Net的图形应用程序类似,都是事件驱动的架构。从用户或系统等外部得到事件(条件变化),然后程序对事件响应或处理,如果程序内没有相应处理,会转到Qt或.Net默认的行为。
简单编码举例:
const double PI = 3.1416;
bool ok;
QString tempStr;
QString valueStr = ui->radiusLineEdit->text();
double valueDbl = valueStr.toDouble(&ok);
double area = valueDbl*valueDbl*PI;
ui->areaLabel2->setText(tempStr.setNum(area));
读取LineEdit的用户输入文本,转换为整数,然后计算面积,用另一个label来显示。