当前位置:编程学习 > wap >>

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;
Qt --------------------编程问答-------------------- 急求,自顶、、、 --------------------编程问答-------------------- 你最后都delete了,肯定显示不出来
progressDlg->setAttribute(Qt::WA_DeleteOnClose);
然后把最后一句删了 --------------------编程问答-------------------- 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这种写法没有问题。 --------------------编程问答-------------------- QProgressDialog* progressDlg先设为成员变量,去掉delete progressDlg看看显示对话框不。 --------------------编程问答--------------------
引用 4 楼 liyanfasd 的回复:
QProgressDialog* progressDlg先设为成员变量,去掉delete progressDlg看看显示对话框不。


不显示 --------------------编程问答-------------------- 你用同步的方法当然没有办法让progressbar显示,简单的说就是你这样写主线程都被卡住了。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。
--------------------编程问答--------------------
引用 6 楼 ppdayz 的回复:
你用同步的方法当然没有办法让progressbar显示,简单的说就是你这样写主线程都被卡住了。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。
没有同步啊。。。我就一个线程。。。 --------------------编程问答-------------------- 如果程序没卡住,可能是:Qt的进度条对话框是智能延时的,不会马上出来,要过一会才会看到,目的是如果很快就完成了工作,这个对话框就没有必要显示出来。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,