当刚刚加载时,应用程序相当流畅,但是随着时间的推移,gui变得越来越慢,也就是说,当我点击一个按钮时,它只会在几秒钟(1或2)后生效。
我在任务管理器中查看过程,内存使用情况稳定(大约5米),在点击按钮之前,cpu使用率也为0.
我正在使用Qt_4.8.0和visual_studio_2010。
是不是因为windows上qt lib的效率?
一些代码:
///////// mainwindow.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);
}
答案 0 :(得分:1)
您的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将等到进程完成,因此如果您启动长时间运行的进程,您的应用程序将冻结,直到进程完成。
答案 1 :(得分:0)
delete
tmp吗?但是,可能是由代码的另一部分引起的。如果您发布更多内容我们可以查看。
正如the_mandrill所说,many projects(像VLC,Skype ......)正在使用Qt而没有问题。