[Qt总结篇]终端远程升级client
环境:
QT4.8.5 for Windows(Qt Creator+MinGW)
一、写在前面:
1、深度:鉴于C/C++的功底还远远不足,个人主要精力还是学习C/C++,所以没打算继续深入研究Qt。
2、Why Qt:之前没做过界面相关的东西。也一直非常好奇,那么炫的界面怎么做出来的。
如今须要一个界面,也没人要求必须用微软的MFC,鉴于都要现学现用(也没人能够请教)。而手边有一本半年前买的《C++
GUI QT4编程》(翻过前两章)。于是决定上Qt。
3、内容:不涉及详细编码,在必要时会用代码例证。
4、实质:就一总结贴,但,或许能够带来某些启发或借鉴或抛砖引玉呢。说不定。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY4NjAxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
二、涉及Qt知识(表面可见的):
1、QLabel
2、QLineEdit
3、QGroupBox
4、QDialogButtonBox
5、QPushButton
6、QProgressBar
7、QTableWidget
8、QTextBrowser
9、QDate、QTime、QTimer
10、QRegExp
11、载入硬盘上的文件
12、错误提示框
13、应用程序加入Logo、更改软件标题、禁止软件最大化、设置软件外观
三、一一道来
- QLabel、QLineEdit和QGroupBox:
(1)字体、大小、颜色
这些能够在Qt Designer中直接设置
(2)显示中文
setText(QString::fromUtf8("中文"));
(3)读取输入框的数据。输入完后在【更新日志】框中显示
比如,【远程IP】输入框中捕获了两个信号,并把两个信号连接到同一个槽上:
connect(ipLineEdit, SIGNAL(editingFinished()), this, SLOT(getIP()));
connect(ipLineEdit, SIGNAL(textChanged(QString)), this, SLOT(getIP()));
editingFinished()信号发射的条件是按下Enter键或离开该编辑框,
textChanged(QString) 信号发射的条件是编辑框中内容改变
而在getIP()槽中,须要对不满足的数据进行过滤,在适当的时候,把输入值赋给程序中的变量:
void Class::getIP(void)
{
QString readText = ipLineEdit->text(); /* 1-get text */
QStringList list;
if(readText.compare(Server_ip) != 0) { /* 2-text changed */
list = readText.split(".");
if (!readText.isEmpty() && (list.count() == 4)) {
/* 3- match the value format */
/* assign here */
} else {
}
}
}
至于显示。直接调用QtextBrowser对象的append()函数就可以。
对于其它编辑框,依据须要进行详细处理。
(4)正則表達式QRegExp
在输入数据时使用正則表達式对数据进行限制,能够极大简化应用程序參数检查的代码,使编程过程更加有側重点。
针对该演示样例,须要加正則表達式的地方是:
|
|
限制条件
|
正則表達式 |
|
网络ip
|
1、数字、小数点
2、点分值为[0, 255]
3、小数点把ip分为4部分
|
QRegExp ip("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?
)");
2[0-4]\\d: 200 - 249 25[0-5]: 250 - 255 [01]?\\d\\d?:0 - 199 {3}: 前面括号里的内容反复3次。至此结果格式为:xxx.xxx.xxx.
|
|
网络port
|
1、纯数字
2、最大5位
|
QRegExp port("^[0-9]{1,5}$");
|
|
SIM
|
1、纯数字
2、11位
|
QRegExp sim("^[0-9]{1,11}$");
|
2、进度条QProgressBar:
progressBar->setMinimum(0);
progressBar->setMaximum(100);
设置进度条的最大值和最小值。之后在显示程序执行进度的时候,能够通过emit发射信号在界面线程中更新进度条的显示
3、QPushButton:
主要涉及的是改变button上字体的颜色:
QPalette palet = startButton->palette();
palet.setColor(QPalette::ButtonText, QColor(75, 172, 198));
startButton->setPalette(palet);
4、更新软件上的时间QDate、QTime、QTimer
通过QTimer建立一个定时器,一秒发射一次更新时间的信号。在相应槽中显示时间:
QDateTime dateTime = QDateTime::currentDateTime();timeLabel->setText(dateTime.time().toString());5、QTextBrowser这里还是使用了Qt的信号-槽机制,由于在多线程中:(1)初主线程外。不要从其它不论什么线程訪问GUI界面(2)禁止跨线程的父-子关系有了信号-槽机制,在GUI线程更新界面也自然就水到渠成。6、载入文件调用静态(static)函数QFileDialog::getOpenFileName就可以选择要载入的文件。该函数返回用户选择的文件名称(含路径),否则返回空串(null string)。该函数同一时候弹出一个模态对话框(modal file dialog),供用户浏览文件。
QString initName = fileLineEdit->text();
if (initName.isEmpty()) {
/* load file from currentPath */
initName = QDir::currentPath();
}
/* getOpenFileName() returns an existing file selected by the user */
updateFileName = QFileDialog::getOpenFileName(this, tr("Open file"), initName);
updateFileName = QDir::toNativeSeparators(CAppConfig::one.updateFileName);
if (updateFileName.isEmpty()) {
/* update text in the QLineEdit */
fileLineEdit->setText(CAppConfig::one.updateFileName);
/* do other things */
} else {
}
7、错误提示框没错! 就是QMessageBox。提出这一点,主要是基于软件的人性化考虑,它的相关内容在帮助文档中非常具体:
8、应用程序加入Logo、更改软件标题QIcon icon("./logo.png");setWindowIcon(icon);setWindowTitle(QString::fromUtf8("软件名称V1.0"));10、禁止软件最大化功能setFixedSize(this->width(), this->height());四、设置软件外观Style之所以把它单独拉出来是由于。这是一个既大又宽泛的专题。除Qt本身界面之外,还能够在Qt中用Open GL绘制高级绚丽的界面,而个人并不打算就此深究(还要去学C/C++)。而作出上图的效果,是直接把《C++ GUI QT4编程》中一个文件加到了自己的project中。QApplication::setStyle(new BronzeStyle);五、Qt多线程參见还有一篇:[Qt学习篇]Qthread实现多线程操作或http://no001.blog.51cto.com/1142339/277004/六、Qt网络编程參见还有一篇:[Qt学习篇]UDP编程[2014-9-3]补充:1、UDP中隐含排队
2、UDP都有接收缓冲区
3、client无需绑定IP七、说在最后捣鼓Qt的过程中,最让赞的还是Qt的信号-槽机制。有了它好多事情就自自然然成了,用《圣经》话说:神说:“要有光! ”就有了光。 神说:“众水之间要有穹苍。把水和水分开! ”事就这样成了。
[Qt总结篇]终端远程升级client的更多相关文章
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块AT指令TCP透传方式,定时访问升级(含有数据校验)
实现功能概要 单片机定时使用http访问云端的程序版本,如果版本不一致, 然后通过http下载最新的升级文件,实现远程升级STM32程序. 兼容Air202 ,SIM800 测试准备工作(默认访问我的 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定时访问升级(兼容Air202,SIM800)
实现功能概要 单片机定时使用http访问云端的程序版本, 如果版本不一致,然后通过http下载最新的升级文件,实现远程升级STM32. 兼容Air202,SIM800 测试准备工作(默认访问我的服务器 ...
- 基于TFTP协议的远程升级设计
说明:因为CSDN博客编辑器对word格式近乎不支持.因此对表格使用了图片方式(最后一个表格未使用图片格式.大家能够看看效果),CSDN博客编辑器上传图片十分不人性化(直接复制图片是不显示的),因此本 ...
- 【转】 基于TFTP协议的远程升级设计
版权声明:本文为博主原创文章,未经博主允许不得转载.联系邮箱:zhzhchang@126.com 说明:由于CSDN博客编辑器对word格式近乎不支持,因此对表格使用了图片方式(最后一个表格未使用图片 ...
- STM32f103x IAP远程升级小结
最近在面试的时候遇到一个关于IAP远程程序升级的问题,由于之前所做的项目没有涉及到远程升级需求,当时一脸懵呆,不过回答的还是不错的,今天针对STM32F103系列调试了IAP的程序,这里做一下小结,如 ...
- 在linux终端远程登陆linux服务器
在linux终端远程登陆linux服务器 原来在Linux终端远程登陆linux服务器是那么的容易,如果的服务器用户名是abc(也可以是root),只需要在终端输入: 然后电脑会提示输入密码就登录 ...
- 基于IAP和Keil MDK的远程升级设计
写在前面:三个周之前,我突然想写一个远程升级的程序.那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知.我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题. ...
- linux学习:【第3篇】远程连接及软件安装
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第3篇]远程连接及软件安装 远程连接 xshell , xftp软件官网 : ...
- ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
随机推荐
- ubuntu 网卡配置
- springboot Tomcat connector configured to listen on port 8081 failed to start.
启动报 Tomcat connector configured to listen on port 8081 failed to start. The port may already be in ...
- 第2节 hive基本操作:9、hive当中创建外部表的语法及外部表的操作&分区表的语法和操作
外部表: 外部表说明: 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉 管理表和外部 ...
- Java中的JVM的内存结构
Java的虚拟机自身结构图: JVM内存结构主要包括两个子系统和两个组件.两个子系统分别是Classloader子系统和Executionengine(执行引擎)子系统:两个组件分别是Runtimed ...
- python3.x Day5 面向对象
类:类是指:对具有相同属性的事物的抽象.蓝图.原型.在类中定义了这些事物都具备的属性和共同的方法. 对象:一个对象就是一个类实例化以后的实例,一个类必须经过实例化后才能在程序中被使用,一个类可以实例化 ...
- element-UI 多表单重置的时候的坑
问题细化一下是这样的:比如我有一个用来修改数据的表单,第一条数据是{name: 'Xixi', age: 12},打开表单后就有两个输入框分别填的是Xixi和12,此时我修改Xixi为Haha,调用t ...
- java 反射---学习笔记
一.java的动态性 反射机制 动态编译 动态执行JavaScript代码 动态字节码操作 二.动态语言 动态语言 程序运行时,可以改变程序结构或变量类型,典型的语言:python.ruby.java ...
- C语言学习3
实现输入错误后重新输入 通过输入指定的行数和列数打印出二维数组对应的任一行任一列的值: #include <stdio.h> void main() { ][] = {{, , , },{ ...
- LeetCode (45) Jump Game II
题目 Given an array of non-negative integers, you are initially positioned at the first index of the a ...
- 洛谷 3953 NOIP2017提高组Day1 T3 逛公园
[题解] 先建反向图,用dijkstra跑出每个点到n的最短距离dis[i] 设f[u][k]表示dis(u,n)<=mindis(u,n)+k的方案数.对于边e(u,v,w),走了这条边的话需 ...