刚加载时,应用程序相当流畅,但随着时间的推移,gui变得越来越慢,也就是说,当我点击一个按钮时,它只会在几秒钟后生效(1或2)。
我在任务管理器中观察了这个过程,内存使用率稳定(大约5米),在我点击按钮之前,cpu使用率也是0。
我将Qt_4.8.0与visual_studio_2010一起使用。
这是因为qt-lib在windows上的效率吗?
部分代码:
/////////主窗口.h//////////
QPushButton* reloadHostsPushButton = new QPushButton("Reload Hosts");
reloadHostsPushButton->setMaximumSize(aPushButtonMaxSize);
connect(reloadHostsPushButton, SIGNAL(clicked()),
this, SLOT(reloadHostsClicked()));
QPushButton* flushDNSPushButton = new QPushButton("Flush DNS Cache");
flushDNSPushButton->setMaximumSize(aPushButtonMaxSize);
connect(flushDNSPushButton, SIGNAL(clicked()),
this, SLOT(flushDNSClicked()));
controlPanelLayout = new QGridLayout();
controlPanelLayout->addWidget(openHostsPushButton, 0, 0);
controlPanelLayout->addWidget(reloadHostsPushButton, 0, 1);
controlPanelLayout->addWidget(flushDNSPushButton, 0, 2);
controlPanelLayout->addWidget(quitPushButton, 1, 2);
controlPanelLayout->addWidget(aboutPushButton, 1, 1);
controlPanelLayout->addWidget(optionsPushButton, 1, 0);
controlPanel = new QWidget();
controlPanel->setLayout(controlPanelLayout);
/////////server.h//////////////flushDNSClicked()调用此///////
void Server::flushDNSCache(){
ui_LogPanel->log("Flushing DNS cache...", UI_LogPanel::aLogRed);
QProcess* tmp = new QProcess();
tmp->start("ipconfig", QStringList() << "/flushdns");
ui_LogPanel->log("DNS cache flushed!", UI_LogPanel::aLogItalic | UI_LogPanel::aLogGreen);
}
flushDNSCache()槽函数包含一个错误和一些一厢情愿的想法。尽管我不认为这会导致经济放缓。
您正在创建一个QProcess对象,但从未删除它。您正在将DNS缓存刷新的日志打印到日志中,希望一切正常。
如果你不在乎ipconfig是否成功,你可以使用QProcess::startDetached如下:
void Server::flushDNSCache(){
ui_LogPanel->log("Flushing DNS cache...", UI_LogPanel::aLogRed);
QProcess::startDetached("ipconfig", QStringList() << "/flushdns");
ui_LogPanel->log("DNS cache flushed!",
UI_LogPanel::aLogItalic | UI_LogPanel::aLogGreen);
}
现在,您不会留下任何未删除的QProcess对象。
更好的方法是使用QProcess::execute:
void Server::flushDNSCache(){
ui_LogPanel->log("Flushing DNS cache...", UI_LogPanel::aLogRed);
int exitCode = QProcess::execute("ipconfig", QStringList() << "/flushdns");
if (exitCode == 0)
{
ui_LogPanel->log(
"DNS cache flushed!",
UI_LogPanel::aLogItalic | UI_LogPanel::aLogGreen);
}
else
{
ui_LogPanel->log(
QString("DNS cache flush failed with exit code %1!").arg(exitCode),
UI_LogPanel::aLogItalic | UI_LogPanel::aLogRed);
}
}
现在您可以检查退出代码了。但是,请注意,QProcess::execute将等待进程完成,所以如果您启动长时间运行的进程,您的应用程序将冻结,直到进程完成。
你能试试delete
ing tmp吗?但是,它可能是由代码的另一部分引起的。如果你发布更多,我们可以查看。
正如_mandrill所说,许多项目(如VLC、Skype…)都在毫无问题地使用Qt。