需求

Qt 需要检查配置文件中的内容,如果有问题,就退出程序

解决

一般检查配置文件,是在构造函数环节,这个时候普通的退出是不行的。只能使用 QTimer 然后连接 qApp->quit() 来退出。

	  QSettings* configIni = new QSettings(file_path, QSettings::IniFormat, this);

	  server_ip_ = configIni->value("ip", "192.168.1.100").toString();
	  server_port_ = configIni->value("port", "6666").toInt();
	  if (CheckServerIpAndPort(server_ip_, server_port_) == false) {
	      QTimer *myTimer = new QTimer();
	      myTimer->start(10);
	      connect(myTimer, &QTimer::timeout, this, [=](){this->close(); qApp->quit();});
	  }

	  configIni->endGroup();


bool MainWindow::CheckServerIpAndPort(const QString &ip, uint16_t port)
{
    QStringList list = ip.split('.');
    if (list.size() != 4) {
      QMessageBox::critical(this, "IP格式错误", "请重新配置IP");
      return false;
    }

    for (auto& s : list) {
      int address = s.toInt();
      if (address < 0 || address > 255) {
	  QMessageBox::critical(this, "IP数值错误", "请重新配置IP");
	  return false;
      }
    }

    if (port < 1024) {
      QMessageBox::critical(this, "端口号错误", "请重新配置端口,端口号需要 > 1024");
      return false;
    }

    return true;
}

参考