本人自学QT一年多,也许会有和本人一样有强迫症,比如程序系统托盘刷新和文本编辑框输入IP和端口校验正确的地址和端口,其他字符不可输入。有的会经常用到UDP和TCP,在上述中校验的同时在输入完成后不用重打开主程序生效,而是在输入完成后自动重启主程序。在这整理一下,CSDN里可以搜索到相应的博文:
可在程序启动后用定时器QTImer进行刷新。 这个方法比较稳妥。试了程序打开直接调用,没有刷新图标,可自行尝试.
2、IP和端口校验
CPP文件
#include<QVector>
QIntValidator* IntValidator = new QIntValidator(this);//端口校验
IntValidator->setRange(0, 65535);//端口限制(0,65535)
ui->lineEdit_port->setValidator(IntValidator);
QRegExp rx("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]\\d\\d?)$");//IP校验 QRegExpValidator *ip = new QRegExpValidator(rx, this);
ui->lineEdit_ip->setValidator(ip);
3、程序重启:
头文件.h添加槽函数
void reboot();//重启软件
void MainWindow::reboot()//重启软件
{
qApp->exit(RETCODE_RESTART);
}
在main.CPP添加:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyle(QStyleFactory::create("fusion"));
MainWindow w;
w.show();
int exitcode = a.exec();
if(exitcode == RETCODE_RESTART)
{
// 传入 qApp->applicationFilePath(),启动自己
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
return 0;
}
return exitcode;
}
重启示例:
void MainWindow::on_lineEdit_ip_editingFinished()//本地IP
{
if (ui->lineEdit_ip->text() == NULL)
{
ui->lineEdit_ip->setText(configIni->value("config/ip").toString()); //空时等于cofnig.ini中的ip
}
else
{
QMessageBox::information(NULL,"提示","请重启软件生效","重启软件");
configIni->beginGroup("config");
configIni->setValue("ip", ui->lineEdit_ip->text()); //非空时把lineEdit_ip文本写入到config.ini中ip的值
configIni->endGroup();
this->reboot(); //重启本程序
}
}