[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 ...
随机推荐
- AttributeError: 'list' object has no attribute 'extends' && list详解
拼写错误 是extend 而不是extends 出错demo: In [27]: c = [2,3] In [28]: c.extends([5]) ------------------------ ...
- 用npm来部署快速一个httpweb服务器
https://blog.csdn.net/u012182627/article/details/55060594 http-server的安装######注意事项 安装http-server的时候 ...
- Axure 9 面板折叠显示隐藏
1 首先放置一个面板1作为点击事件: 2 另外一个面板2或者其他组建,将其设置为动态面板,然后隐藏 3 给面板1添加如下事件,即可: 4 我们点击面板1,可以实现展开隐藏面板2的动态效果
- ipv6工具类
package mapreduce.nat; import java.math.BigDecimal; import java.math.BigInteger; import java.net.Ine ...
- Laravel Excel模板导出-带图片
Laravel Excel版本 3.1 1.数据准备 建个2个表,加点数据,控制器中查数据,给模板使用. 表1-order:id, order_no, img_path, note 表2-order_ ...
- hdfs深入:06、hdfs的写入过程
7.HDFS的文件写入过程 详细步骤解析: 1. client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传: 2. ...
- 怎样让Oracle的存储过程返回结果集
Oracle存储过程: CREATE OR REPLACE PROCEDURE getcity ( citycode IN VARCHAR2, ref_cursor OUT sys_refcursor ...
- 使用Java(Jedis)链接redis报java.net.ConnectException: Connection refused: connect的错误
redis环境:centos6 java代码运行环境:windows 第一种情况:未开启redis服务. redis-server /myredis/redis.conf (写你的redis配置文件的 ...
- [Python3网络爬虫开发实战] 6.1-什么是Ajax
Ajax,全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML.它不是一门编程语言,而是利用JavaScript在保证页面不被刷新.页面链接不改变 ...
- google查找笔记
1.可以选择MDN.WIKI等权威的网址资料