代码:
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);
然后把最后一句删了
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这种写法没有问题。
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
不显示
#6
你用同步的方法当然没有办法让progressbar显示,简单的说就是你这样写主线程都被卡住了。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。
#7
没有同步啊。。。我就一个线程。。。
#8
如果程序没卡住,可能是:Qt的进度条对话框是智能延时的,不会马上出来,要过一会才会看到,目的是如果很快就完成了工作,这个对话框就没有必要显示出来。
#9
我也遇到了同样的问题,不知道楼主当年解决了没有,是怎么解决的?
#1
急求,自顶、、、
#2
你最后都delete了,肯定显示不出来
progressDlg->setAttribute(Qt::WA_DeleteOnClose);
然后把最后一句删了
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这种写法没有问题。
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
不显示
#6
你用同步的方法当然没有办法让progressbar显示,简单的说就是你这样写主线程都被卡住了。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。
解决的办法是用异步的方式。
就是主界面负责setvalue,然后++之类的操作就是放到别的地方,可以用QFuture、QThread之类的,
但是记住,Qt的绘制一定到放到主线程(GUI线程)做,不要在别的线程做绘制界面的操作。
比如说把progressbar指针传到子线程,然后在子线程中调用progressbar->setValue,这是不可取的。
#7
没有同步啊。。。我就一个线程。。。
#8
如果程序没卡住,可能是:Qt的进度条对话框是智能延时的,不会马上出来,要过一会才会看到,目的是如果很快就完成了工作,这个对话框就没有必要显示出来。
#9
我也遇到了同样的问题,不知道楼主当年解决了没有,是怎么解决的?