近来想学着做一个上位机软件,因而好好学了学Qt,目标是为项目的板子做一个上位机通信的软件。学习教材《Qt Creator 快速入门》,第三版,霍亚飞编著,笔者学习是买的教材书,这样看着比较有感觉,并且以后也可以回头学习。与此同时,附上该教材代码分享:
链接: https://pan.baidu.com/s/1nuJNClb 密码: 6u3n,这样一来,上手较快,省下了很多时间。
qt社区提供软件下载:
http://www.qter.org/
1、下载qt
由于网上关于qt版本繁多,而社区提供的源码主要是QT4的,由于qt4版本不好下载,且需安装多个压缩文件,应而本文直接使用最新的qt5.6作为开发工具,另外需要注意的是qt5.6需要下载含有mingGW的32bits版本。切记使用最新版本的qt,32位的可以运行在64位的机器上! 本文使用的是qt-opensource-windows-x86-mingw492-5.6.2.exe版本,大小为1G。工程名或者安装目录一定不要出现中文字符
2、如何发布Qt
1、Qt Widgets Application可执行程序发布方式
首先用 QtCreator 新建一个 Qt Widgets Application 项目,直接用默认的 QMainWindow 程序就可以了,项目名字假定是 SerialPort。
然后以 Release/Debug 方式编译生成 exe 程序:
生成的程序运行正常之后,找到项目的生成目录,比如 项目源码路径:
C:\QtPros\hellomw\
它的项目生成目录是
C:\QtPros\build-hellomw-Desktop_Qt_5_4_0_MinGW_32bit-Release\
进入这个文件夹,在进入它的子文件夹 release/debug 里面,找到 SerialPort.exe ,
将这个exe 复制到一个新的单独的文件夹里用于发布,比如存到
D:\SerialPort\ 文件夹里面。
然后从开始菜单打开 Qt 命令行(注,在Qt的子目录下有一个 Qt5.6 for Desktop(MinGW 32bit,它就是Qt命令行)),输入命令 :
cd /d D:\SerialPort
然后使用 windeployqt 工具命令:
windeployqt SerialPort.exe
然后可以在 D:\SerialPort 文件夹里看到 windeployqt 工具自动复制的插件文件夹
和 dll文件、qm文件。这时候得到的就完整的 exe 程序发布集合,依赖关系都解决好了。
把 D:\SerialPort 文件夹 打包就可以发布了,不用自己一个个找 dll 文件了。
D:\SerialPort 文件夹里的qm文件是多国语言翻译文件,不需要可以删了,
其他的都保留。
(注:此步骤宜在网吧的第一台机子进行,它安装了QT creator,运行成功过。)
2、这么做,还是太大了,一个小软件有600MB以上,压缩处理它。
http://enigmaprotector.com/en/downloads.html
下载–Enigma Virtual Box,将文件打包处理
最后生成一个exe文件,可以在其他环境下直接打开。
A. 命令行界面实现
Ptoject1:制作一个命令行。
ctrl+L–垂直布局 ctrl+R–编译
1)通过改变多信息文本,修改字体大小与位置。
2)设置固体大小:(用this指针来修改)
this->setMaximumSize(393,171);
this->setMinimumSize(393,171);
3)设置程序标题
this->setWindowTitle(“命令行”);
4) 清除命令行输入后的空格
QString startProgram = ui->cmdLineEdit->text();
process->start(startProgram.trimmed());//清除空格
5) 输入回车连接到确认按钮–信号/糟连接
在构造函数里添加连接槽的操作
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setMaximumSize(400,200);
this->setMinimumSize(400,200);
this->setWindowTitle("命令行");
QObject::connect(ui->cmdLineEdit,SIGNAL(returnPressed()),this,SLOT(on_submitButton_clicked()));
//cmdLineEdit里面按下了回车(returnPressed()),即连接到确认按钮(on_submitButton_clicked())
}
6)效果图
代码分享:
https://github.com/wangwangmingyue/QT5.git
B.计算器软件实现
1) 槽函数:
//点击“计算”按钮连接到槽函数进行计算,然后将结果显示至ui->ResultEdit.
QObject::connect(ui->CalButton,SIGNAL(clicked()),this,SLOT(calslot()));
2) QMessageBox 消息框,可以将结果或者警告信息弹出
QMessageBox::information(this,"Result:",QString::number(result));
3)主函数代码
//槽函数
void MainWindow::calslot()
{
int first = ui->FirstEdit->text().toInt();
int second = ui->SecondEdit->text().toInt();
int result = 0;
//comboBox进行符号选择,0为‘+’,依次类推
switch(ui->comboBox->currentIndex())
{
case 0:
result = first + second;
ui->ResultEdit->setText((QString::number(result)));
QMessageBox::information(this,"Result:",QString::number(result));
break;
case 1:
result = first - second;
ui->ResultEdit->setText((QString::number(result)));
QMessageBox::information(this,"Result:",QString::number(result));
break;
case 2:
result = first * second;
ui->ResultEdit->setText((QString::number(result)));
QMessageBox::information(this,"Result:",QString::number(result));
break;
case 3:
if(second==0)
{
QMessageBox::warning(this,"Error Message","Second Cannot be zero!");
return ;
}
else
{
result = first / second;
ui->ResultEdit->setText((QString::number(result)));
break;
}
default:break;
}
}