QProgressDialog不显示内容

时间:2022-07-09 08:11:12
QProgressDialog不显示内容

代码:
char* suffix = ".txt";

QProgressDialog* progressDlg = new QProgressDialog;
progressDlg->setWindowModality(Qt::WindowModal);
progressDlg->setWindowTitle("Loading files...");
progressDlg->setRange(1, n);
progressDlg->setModal(true);
progressDlg->setVisible(true);
progressDlg->show();
for(int i = 1; i <= n; ++i)
{
Taxi t;
char fileName[256];
sprintf(fileName, "%s%d%s", fileDir, i, suffix);

progressDlg->setValue(i);
progressDlg->setLabelText(fileName);

t.readData(fileName);
if(t.getId() != -1) m_vTaxi.push_back(t);     
}
delete progressDlg;

9 个解决方案

#1


急求,自顶、、、

#2


你最后都delete了,肯定显示不出来
progressDlg->setAttribute(Qt::WA_DeleteOnClose);
然后把最后一句删了

#3


QProgressDialog progressDlg;
progressDlg.setWindowModality(Qt::WindowModal);
progressDlg.setWindowTitle("Loading files...");
progressDlg.setRange(1, n);
progressDlg.setModal(true);
progressDlg.show();

for(int i = 1; i <= n; ++i)
{
Taxi t;
char fileName[256];
sprintf(fileName, "%s%d%s", fileDir, i, suffix);

progressDlg.setValue(i);
progressDlg.setLabelText(fileName);

t.readData(fileName);
if(t.getId() != -1) m_vTaxi.push_back(t);     
}

跟delete没关系,改成这样了依然显示不了,而且在delete这种写法没有问题。

#4


QProgressDialog* progressDlg先设为成员变量,去掉delete progressDlg看看显示对话框不。

#5


引用 4 楼 liyanfasd 的回复:
QProgressDialog* progressDlg先设为成员变量,去掉delete progressDlg看看显示对话框不。


不显示

#6


你用同步的方法当然没有办法让progressbar显示,简单的说就是你这样写主线程都被卡住了。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。

#7


引用 6 楼 ppdayz 的回复:
你用同步的方法当然没有办法让progressbar显示,简单的说就是你这样写主线程都被卡住了。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。
没有同步啊。。。我就一个线程。。。

#8


如果程序没卡住,可能是:Qt的进度条对话框是智能延时的,不会马上出来,要过一会才会看到,目的是如果很快就完成了工作,这个对话框就没有必要显示出来。

#9


我也遇到了同样的问题,不知道楼主当年解决了没有,是怎么解决的?

#1


急求,自顶、、、

#2


你最后都delete了,肯定显示不出来
progressDlg->setAttribute(Qt::WA_DeleteOnClose);
然后把最后一句删了

#3


QProgressDialog progressDlg;
progressDlg.setWindowModality(Qt::WindowModal);
progressDlg.setWindowTitle("Loading files...");
progressDlg.setRange(1, n);
progressDlg.setModal(true);
progressDlg.show();

for(int i = 1; i <= n; ++i)
{
Taxi t;
char fileName[256];
sprintf(fileName, "%s%d%s", fileDir, i, suffix);

progressDlg.setValue(i);
progressDlg.setLabelText(fileName);

t.readData(fileName);
if(t.getId() != -1) m_vTaxi.push_back(t);     
}

跟delete没关系,改成这样了依然显示不了,而且在delete这种写法没有问题。

#4


QProgressDialog* progressDlg先设为成员变量,去掉delete progressDlg看看显示对话框不。

#5


引用 4 楼 liyanfasd 的回复:
QProgressDialog* progressDlg先设为成员变量,去掉delete progressDlg看看显示对话框不。


不显示

#6


你用同步的方法当然没有办法让progressbar显示,简单的说就是你这样写主线程都被卡住了。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。

#7


引用 6 楼 ppdayz 的回复:
你用同步的方法当然没有办法让progressbar显示,简单的说就是你这样写主线程都被卡住了。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。
没有同步啊。。。我就一个线程。。。

#8


如果程序没卡住,可能是:Qt的进度条对话框是智能延时的,不会马上出来,要过一会才会看到,目的是如果很快就完成了工作,这个对话框就没有必要显示出来。

#9


我也遇到了同样的问题,不知道楼主当年解决了没有,是怎么解决的?