qmake -project //在控制台konsole中将当前目录切换到hello.cpp文件所在的目录。此时。QT的qmake工具将在当前目录下自动生成应用程序hello的工程文件hello.pro. 文件格式如下:
#-------------------------------------------------
#
# Project created by QtCreator 2013-10-18T13:48:11
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = HelloWorld3
TEMPLATE = app
SOURCES += main.cpp
HEADERS +=解释一:
TEMPLATE描述为建立目标文件而采用何种模板,即生成何种形式的MakeFile文件。qmake工具定义了5种模板。
应用程序app,为建立一个QT应用程序创建MakeFile文件。
库lib,为建立应用程序库而创建Makefile文件。
子工程subdirs,为建立子目录下的目标文件创建一个Makefile文件,子目录通过变量SUBDIRS指定(子目录下的工程文件也需要指出使用何种模板)。
VC应用程序cvapp,为Visual Studio生成一个应用程序工程,仅仅用于Windows操作系统。
VC库vclib,为Visual Studio生成一个应用程序库工程,仅仅用于Windows操作系统。
解释二:
TARGET描述目标文件的名称。qmake工具自动生成的qmake工程文件采用默认方式(TARGET的值为空),即应用程序的名字采用工程文件hello.pro所以的文件夹的名字hello.
解释三:
DEPENDPATH:描述建立应用程序所依赖的其他文件所在的路径。
解释四:
INCLUDEPATH:描述编译该工程时编译器需要搜索的#include路径。
解释五:
SOURCE:告诉编译器,源代码文件的路径及其文件名字。
接下来运行make命令编译,连接,生成可执行代码
./hello 运行可执行代码
QObject::connect( btn, SIGNAL(clicked()), pwidget, SLOT(close()));程序使用了QObject对象的静态函数connect(),此外QObject类还提供了非静态形式的connect()函数。继承自QObject的QT类都具有支持信号和槽的能力,并且可以在子类的实现代码中直接使用connect()函数。
Q_OBJECT宏的作用是启动QT元对象系统的一些特性(比如支持信号和槽),它必须放置到类定义的私有区。
当在一个类的头文件中仅仅使用了指向另一个类的对象的指针时,只需要通过class ***这种前向声明告诉编译器该类已经存在。好处主要有2点:
1、减小了头文件的大小,增加编译速度。
2、可以避免因头文件包含的顺序不当而造成连接错误,特别是在大型工程当中很容易发生这种错误。
QString::trimmed()移除在字符串开头和结尾的空白字符,并返回移除空白字符后的字符串。这些空白字符包括ASCII字符 \t \n \v \f \r以及空格。
QLocal::system().name()以“语言_国家”的形式返回系统场景,”语言“表示为两个小写字母的ISO639语言代码,简体中文的语言代码为zh,”国家“表示为两个大写字母的ISO3166国家代码,中国的国家代码为CN。
QT中,QDialog::exec()以模态方式显示对话框,而QDialog::show()默认以非模态方式显示对话框。
QMessageBox类提供了显示操作信息的几种模态对话框:
1、QMessageBox::about:一个仅仅带有标题和简单文本的消息框
2、QMessageBox::aboutQt:显示关于Qt的消息框,包括Qt版本以及Trolltech公司的产品信息等。
3、QMessageBox::information:一个具有主题和提示文本的提示消息框,可根据情况定制按钮的个数,以及各个按钮的角色。
4、QMessageBox::question:一个具有标题和文本信息的询问消息框,可根据情况定制按钮的个数,以及各个按钮的角色。
5、QMessageBox::warning:一个具有标题和文本信息的警告消息框,.....
6、QMessageBox::cirtical:一个具有标题和文本信息的致命错误消息框,......
QMessageBox的几种模态消息框的标题栏使用父窗口部件的图标。
QT提供的内建对话框:
1、颜色对话框QColorDialog:能够允许用户选择颜色。
2、错误消息框QErrorMessage:显示错误信息。
3、文件对话框QFileDialog:允许用户选择一个或者多个文件以及目录。
4、字体对话框QFontDialog:允许用户选择/设置字体。
5、输入对话框QInputDialog:允许用户进行简单的输入,比如输入一行文本或一个数字。
6、页设置对话框QPageSetupDialog:配置与页相关的打印机选项。
7、进度对话框QProgressDialog:指示一个长时间操作的工作进度,以提示用户该操作是否已经停滞。
8、打印对话框QPrintDialog:配置打印机,可以允许用户选择可用的打印机,以及允许用户设置文档相关的设置,打印类型,页码范围和打印的份数等。
QPalette常用颜色角色:
1、QPalette::Window:通常指窗口部件的背景色。
2、QPalette::WindowText:通常指窗口部件的前景色。
3、QPalette::Base:指文本输入窗口部分的背景色。
4、QPalette::Text:与QPalette::Base一块使用,指文本输入窗口部件的前景色。
5、QPalette::Button:指按钮窗口部件的背景色。
6、QPalette::ButtonText:指按钮窗口部件的前景色。
qt Designer工具介绍:
1、对象监视器:列出了界面中的所有窗口部件,以及各窗口部件的父子关系和包容关系。
2、属性编辑器:列出了窗口部件可编辑的属性。
3、动作编辑器:列出了窗口部件设计的QAction动作,通过”添加“或”删除“按钮可以新建一个可命名的QAction动作或删除指定的QAction动作。
4、信号/槽编辑器:列出了在QT设计器中关联的信号和槽,通过双击列中的对象或信号/槽,可以进行对象的选择和信号/槽的选择。
5、资源编辑器:列出了程序使用的资源文件以及相应的资源,在该编辑器中可以创建或删除资源文件,也可以添加或取消资源。
6、Widget编辑模式:可以在QT设计器中添加GUI窗口部件以及修改它们的属性和外观。
7、信号和槽编辑模式:可以在QT设计器中的窗口部件上关联QT已经定义好的信号和槽。
8、伙伴编辑模式:可以在QT设计器中的窗口部件上建立QLabel标签和其他窗口部件的伙伴关系。
9、Tab编辑模式:可以在QT设计器中的窗口部件上设置Tab键在窗口部件上的焦点顺序。
注:QLabel标签和伙伴窗口部件
一个标签QLabel和一个窗口部件 具有伙伴关系,即当指用户激活标签的快捷键时,鼠标/键盘的焦点将会转移到它的伙伴窗口部件 上。只有QLabel标签对象才可以有伙伴窗口部件,也只有该QLabel对象具有快捷键(在显示文本的某个字符前面添加一个前缀”&",就可以定义快捷键)时,伙伴关系才有效。如:
QLineEdit* priceLineEdit = new QLineEdit(this);
QLabel* priceLabel = new QLabel("&Price",this);
priceLabel->setBuddy(priceLineEdit);
代码定义了priceLabel标签的快捷键为Alt+P,并将行编辑框priceLineEdit设为它的伙伴窗口部件。当用户按下“Alt+P",焦点将会跳至编辑框priceLineEdit中。
QT提供了3种方法在应用程序中使用QT设计器绘制的界面类:
1、直接使用
2、单一继承
3、多继承
注:在多重继承的情况下,QT的类必须要放在其他类的前面,即必须先继承QWidget,再继承Ui_FindFileForm。这是因为元对象编译器假定第一个继承的类是QObject的子类。此外,QT不支持对QObject的虚拟继承。
QT中信号和槽的关联方式:
1、一个信号和一个槽关联
2、一个信号和多个槽关联
3、多个信号和一个槽关联
QT::ConnectionType定义信号和槽的关联方式:
1、Qt::DirectConnection:信号发送后立即传递给相关联的槽,只有槽函数执行完毕返回后,发送信号”emit<信号>之后的代码才被执行。
2、Qt::QueuedConnection:信号发送后排队,直到事件循环有能力将它传递给槽;而不管槽函数有没有执行,发送信号"emit<信号>之后的代码都会立即得到执行。
3、Qt::AutoConnection:如果信号和槽在同一个线程,信号发出后,槽函数立即执行,等同于Qt::DirectConnection;如果信号和槽不在同一个线程,信号将排队,等待事件循环的处理,效果等同于Qt::QueuedConnection。
Qt信号和槽机制的优点是:
1、类型安全的:需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同;不过,一个槽的参数个数是可以少于信号的参数个数的,但缺少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符,编译器会报错。
2、松散偶合的:信号和槽之间有没有必然的固定的关联。
注:一个类想要支持信号和槽,必须从QObject或QObject的子类继承。QT信号和槽机制不支持对模板的使用。
信号槽的自动关联:
void on_<窗口部件名>_<信号名>_(<信号参数>);