1. 前期准备
a. 下载QT
地址:http://qt-project.org/downloads
对象:Show Downloads->QT X.X.X for Windows 32或64bit (VS2010,OpenGL,593M)
得到qt-opensource-windows-x86-msvc2010-5.2.1.exe,点击安装,一路确定。
b. 下载VS QT插件
地址:上述地址不变
对象:Show Downloads->Other downloads->Visual Studio Add-in X.X.X for QT5 (supports versions 2008,2010,2012,does not work with the Express edition)
得到qt-vs-addin-opensource-1.2.3-alpha.exe,点击安装,一路确定。
2. 开始配置
a. 新建项目->QT5 projects->QT Application->Finish
b. 项目建立后,菜单栏Qt5->Qt Options->Qt Versions->Add->Version name输入Qt5.2.1->Path找到Qt安装目录,如C:/Qt/Qt5.2.1/5.2.1/msvc2010->OK
c. 右击项目->属性->配置属性->VC++ 目录
包含目录->C:\Qt\Qt5.2.1\5.2.1\msvc2010\include
库目录-> C:\Qt\Qt5.2.1\5.2.1\msvc2010\lib
至此配置完成。
3.写界面
用QT designer设计界面,生成文件xxx.ui。
打开Qt控制台
生成可以使用的.h文件
将生成的ui_xxx.h文件拷到工程目录,然后添加到工程中。
使用ui_xxx.h生成自己的.h文件
首先创建xxx.h,然后继承QDialog和Ui::yyy
特别注意这里必须引入QDialog.h的头文件,否则在xxx.cpp中报QDialog不是基类错误:"QDialog" 不是类 "NetCom" 的非静态数据成员或基类。
Form为类名,具体名字可以从ui_xxx.h中找到,文件最后
构造函数中只要有setupUi(this)这句就够了,其他的应自己的需要添加。特别注意setupUi(this)永远都放在最前面:
setupUi(this);
SetCom();
comboBox1->insertItem(0, QString::QString("better"));
否则报
因为ui_netCom.h类中声明了很多指针型成员变量即窗口部件指针,setupUi()对它们进行了new操作为指针创建了对象,后面才可以进行操作。否则上面的comboBox1->insertItem就是操作空指针。
4.添加后台程序
QString转string : qstr.toSTDString()
String转QString:QString::QString(const char*)
数字转QString :QString::number(n);
QT界面不能控制台输出,查看中间结果的方法
首先添加头文件#include <qtextcodec.h>
其次分情况
QT4
构造函数中、setupUi()前添加
QTextCodec::setCodecForTr(QTextCodec::codecForName("system"));
程序中
QString qstr1 = QString(tr("丁春秋"));
QString qstr2 = QString(tr("丁春秋"));
QT5
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QString qstr1 = codec->toUnicode("写串口失败");
QString qstr2 = codec->toUnicode("原因未知");
最后
QMessageBox::warning(this, qstr1, qstr2, QMessageBox::Yes);
QT5中最好将QTextCodec *codec声明为类成员变量,在构造函数中codec = QTextCodec::codecForName("GB2312");,在程序中直接codec->toUnicode("汉字")。
设置部件中字体颜色
右击部件,选择样式表
设置颜色
颜色继承问题
QComboBox是下拉菜单
有时comboBox的选项不能事先定义、要根据程序执行情况添加方法:
comboBox1->insertItem(count, QString::QString(keyData));
count即位置参数,如
for(int i = 0; i < 10; i++)
comboBox1->insertItem(i, QString::number(i));
QPushButton是按钮,讲一下checkable、checked和enabled属性
setCheckable(true) 默认Checkable为false,即Button按下后自动弹起。设置为true后,点击一次则Button按下,点击第二次则Button弹起。
setChecked(true);设置Button为按下还是弹起状态,true按下,false弹起,注意:按下状态不表示点击按钮,就是设置一下Button的外观。
只有Checkable为true,设置Checked才有效。
setEnabled(false)则该Button不能点击,默认为true。
QPushButton的三种信号pressed()、released()、clicked()
pressed():按下按钮时发送该信号
released():松开按钮时发送该信号
clicked():单击一次按钮发送该信号
所以可以在程序中分别定义两个槽void on_pushButton_pressed()和void on_pushButton_released(),来响应按钮按下和松开两个动作。从而摆脱按钮只有单击事件的束缚。
on_pushButton_pressed(),在setupUi()中会自动将名为pushButton的窗口部件的pressed()信号与这个函数连接起来,保证窗口部件在发送该信号的时候,就会自动调用这个槽。
QGroupBox
就像上图中的“串口设置”样式。
界面最小化
点击界面按钮,后台程序开始执行,在执行完毕之前整个界面处于不响应状态。即任何点击、输入及其他一切操作均无效。
5.发布
在Win32\Debug目录下生成exe文件
要打包发布给别人用必须找寻所有的库文件,这也是QT的毛病,带不齐dll文件程序给别人就没法用。
需要的依赖库和文件如下
在网盘里保留了一份QT5所有的依赖文件,有点大且CSDN网盘下载速度慢,考虑后使用。
使用Process Explorer查看依赖库
一开始就是借助于Process Explorer找到所有的依赖文件
运行exe,在Process Explorer中找到对应程序,点击
该程序所有的依赖库都显示在下方,点“Path”将依赖库规整一下,获取有用的dll