【问题标题】:QProcess with GUI not freezing带有 GUI 的 QProcess 不冻结
【发布时间】:2013-12-08 14:58:23
【问题描述】:

我想使用QProcess 从 GUI 启动 mysql。我尝试了以下方法:

QStringList arguments;
arguments << QString("-u%1").arg("myaccount")<<  QString("-p%2").arg("password");

QProcess *mysql = new QProcess;
mysql->setReadChannelMode(QProcess::ForwardedChannels);
mysql->execute("mysql", arguments);

if(mysql->waitForReadyRead(-1))
    qDebug(mysql->readAllStandardOutput());

但是,Qt 文档中提到了一个大问题,它会冻结。 我该如何解决这个问题?许多人建议使用QThread,但我不知道该怎么做? 预先感谢!

【问题讨论】:

    标签: qt


    【解决方案1】:

    问题是你调用了QProcess::execute() 函数,它一直等到进程完成。如果您需要避免冻结,可以使用readyReadStandardOutput() 信号并执行以下操作:

    [..]
    connect(mysql, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
    mysql->start("mysql", arguments);
    if (!mysql->waitForStarted()) {
        // report error
    }
    

    【讨论】:

    • 好的,谢谢!另外,当mysql密码或用户帐户输入错误时,如何提示警告消息框。连接 readyReadStandardOutput() 信号后,我无法检测到这个问题。你能帮忙吗?
    • @elgolondrino,我认为这取决于mysql 如何报告错误的用户名/密码输入:以错误代码退出,将错误消息打印到标准输出或标准错误?
    【解决方案2】:

    此链接可以帮助您: QProcess fails to execute external executable

    调用 MySQL: c:\mysql\mysql.exe -u MYUSERNAME -pMYPassword

    -p 和密码之间没有空格。 设置 MySQL 路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2013-01-16
      • 2020-08-06
      • 2015-04-08
      • 2015-05-09
      相关资源
      最近更新 更多