没有冻结的GUI的QProcess

时间:2013-12-08 14:58:24

标签: qt

我想使用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,但我不知道该怎么做? 先谢谢!

2 个答案:

答案 0 :(得分:1)

问题是您调用QProcess::execute()函数并等待该过程完成。如果您需要避免冻结,可以使用readyReadStandardOutput()信号并执行以下操作:

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

答案 1 :(得分:0)

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

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

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