在函数中动态创建窗口并显示时,如果后面有密集计算的代码,或者延时函数,会导致创建的窗口不能及时显示而被阻塞
如
m_widget = new QWidget(get_handle());
m_widget->resize (get_handle()->width(), get_handle()->height());
m_widget->move (0,0);
m_widget->setStyleSheet("background-color:rgba(0, 0, 0,80%);");
m_widget->show();
for(i = 0;i<99;i++){
...
}
m_widget会在后面的for循环结束后才能得到显示,
对此的解决办法就是异步运行计算密集的代码,让他不能阻塞窗口的显示
将代码写入函数Calc
void Calc(){
for(i = 0;i<99;i++){
...
}
}
包含异步运行需要的头文件
#include <QtConcurrent/QtConcurrent>
#include <QFuture>
原来的代码改为
m_widget = new QWidget(get_handle());
m_widget->resize (get_handle()->width(), get_handle()->height());
m_widget->move (0,0);
m_widget->setStyleSheet("background-color:rgba(0, 0, 0,80%);");
m_widget->show();
QFuture<void> future = QtConcurrent::run(this, &MainWindow::Calc);
while(!future.isFinished());
{
QApplication::processEvents(QEventLoop::AllEvents,100);
}
之后窗口就可以马上显示了