[Qt总结篇]终端远程升级client

环境:
QT4.8.5 for Windows(Qt Creator+MinGW)

一、写在前面:                                                                                                   

1、深度:鉴于C/C++的功底还远远不足,个人主要精力还是学习C/C++,所以没打算继续深入研究Qt

2Why Qt:之前没做过界面相关的东西。也一直非常好奇,那么炫的界面怎么做出来的。

如今须要一个界面,也没人要求必须用微软的MFC,鉴于都要现学现用(也没人能够请教)。而手边有一本半年前买的《C++ GUI QT4编程》(翻过前两章)。于是决定上Qt

3、内容:不涉及详细编码,在必要时会用代码例证。

4、实质:就一总结贴,但,或许能够带来某些启发或借鉴或抛砖引玉呢。说不定。



二、涉及Qt知识(表面可见的):                                                                                   

1QLabel

2QLineEdit

3QGroupBox

4QDialogButtonBox

5QPushButton

6QProgressBar

7QTableWidget

8QTextBrowser

9QDateQTimeQTimer

10QRegExp

11、载入硬盘上的文件

12、错误提示框

13、应用程序加入Logo、更改软件标题、禁止软件最大化、设置软件外观


、一一道来                                                                                 
  1. QLabelQLineEditQGroupBox

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、更新软件上的时间QDateQTimeQTimer
通过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的信号-槽机制。有了它好多事情就自自然然成了,用《圣经》话说:神说:“要有光!

”就有了光。

神说:“众水之间要有穹苍。把水和水分开!

”事就这样成了。


### 回答1: Qt是一个跨平台的应用程序开发框架,可以用于开发各种类型的应用。而exe远程升级是指通过网络软件的exe文件进行更新升级的过程。 要实现Qt开发的应用的exe远程升级,可以考虑以下步骤: 1. 首先,建立一个可靠的网络连接,确保能够通过网络进行文件传输和通信。可以使用Qt中的网络模块,例如QTcpSocket或QUdpSocket,来实现与服务器的连接。 2. 在服务器端,需要准备一个可以存放新版本exe文件的地址,并提供一个文件服务器,为客户端提供文件下载功能。可以使用开源的FTP或HTTP服务器软件,也可以自己根据需要实现一个简单的文件服务器。 3. 在应用程序中,可以使用Qt提供的QNetworkAccessManager类来实现文件下载功能。通过向服务器发送HTTP请求,并将响应的数据保存到本地,就可以完成exe文件的下载。 4. 下载完成后,需要将新版本的exe文件保存到一个临时文件夹中,以便后续的处理。 5. 在下载完成后,可以通过Qt的QProcess类来启动另一个进程,执行临时文件夹中的exe文件。同时,可以通过传递参数的方式告知新版本的exe文件,它所对应的是哪一个应用程序,并在启动后进行相应的更新操作。 6. 更新完成后,可以删除临时文件夹中的exe文件,并进行清理工作,如更新相关的配置文件、注册表等。 需要注意的是,在进行远程升级时,要考虑一些安全性的问题,例如对下载的文件进行数字签名验证,以确保文件的完整性和合法性,避免恶意软件的危害。 总之,通过以上的步骤和使用Qt的相关类和函数,可以实现Qt开发的应用程序的exe远程升级功能。 ### 回答2: Qt是一个跨平台的C++应用程序开发框架,可以用于开发各种类型的应用程序,包括用于远程升级的工具。在Qt中实现远程升级的过程一般包括以下步骤: 1. 准备服务器:首先要准备一个用于存储升级文件的服务器。可以通过FTP、HTTP或者其他协议来提供远程下载的功能。 2. 创建升级文件:开发者需要创建一个包含所有升级内容的文件,通常是一个压缩包,其中包含新版软件的可执行文件以及其他需要更新的文件。 3. 更新检测:在应用程序启动时,可以让程序自动检测是否有新的可用升级文件可供下载。可以通过向服务器发送网络请求来检查版本更新。 4. 远程下载:如果发现有新的升级文件可供下载,应用程序需要从服务器上下载新文件。可以使用Qt自带的网络模块来处理下载功能,通过网络请求获取服务器上的升级文件。 5. 文件替换:下载完成后,应用程序需要将下载的文件替换原有的文件,以完成升级过程。这可以通过文件操作类(如QFile)来完成。 6. 安装升级:如果升级成功,应用程序可以根据需要执行其他额外的操作,例如更新数据库、重启应用等。 需要注意的是,以上步骤只是实现远程升级的一个基本框架,具体的实现方式和细节会根据具体的需求而有所差异。开发者可以根据自己的需求,结合Qt提供的各种功能和模块,来进行灵活的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值