QT中的进度条问题

时间:2010-02-18 12:43:06

标签: qt qt4 symbian progress-bar

我在QT中为动画提供动画时遇到了问题。

以下代码中的错误在哪里,我正在获得继续进度条,但它没有动画

  QApplication a(argc, argv);

QProgressDialog *dialog = new QProgressDialog();


QProgressBar *pbar = new QProgressBar(dialog);

pbar->setMinimum(0);
pbar->setMaximum(0);
pbar->setTextVisible(false);

QDesktopWidget *desktop = QApplication::desktop();
QRect rect = desktop->geometry();

pbar->setGeometry(rect.left(),rect.top(),rect.right(),rect.bottom()-300);

pbar->show();


dialog->setBar(pbar);

dialog->showMaximized(); 
dialog->exec();   
return a.exec();

3 个答案:

答案 0 :(得分:7)

我在Qt 4.5.3的WinXP上尝试了这个代码,它按预期工作。 我不能给你一个解决方案,但我有一个建议: 您不需要将QProgressBar设置为QProgressDialog,它已经有了自己的。

删除QProgressBar的代码,下面的代码与我机器上的原始代码做同样的事情。

QApplication a(argc, argv);

QProgressDialog *dialog = new QProgressDialog();

dialog->setMinimum(0);
dialog->setMaximum(0);

dialog->showMaximized(); 
dialog->exec();   
return a.exec();

答案 1 :(得分:1)

如果您使用的是Windows Vista主题(QWindowsVistaStyle),则会出现一个错误,表示不确定进度条没有动画效果。我在这里写了这个bug,完成了简单的补丁:http://bugreports.qt-project.org/browse/QTBUG-10984

答案 2 :(得分:-2)

Dudes,您认为进度条究竟是什么?它应该向用户显示活动正在进行以及当前进度状态是什么。

您的代码

QProgressDialog *dialog = new QProgressDialog();

dialog->setMinimum(0);

dialog->setMaximum(0);

表示某个操作将从状态0开始,并在状态(或当前值)达到值... 0时结束。你想要一些动画吗?

请参阅http://doc.trolltech.com/4.6/qprogressdialog.html#details

上的示例

基本上你应该创建一个具有最小值和最大值的进度对话框

QProgressDialog *dialog = new QProgressDialog();

dialog->setMinimum(0);

dialog->setMaximum(100);

然后更新实际进度值(例如,在触发执行槽的计时器上),以便在进度条中显示它:

void Operation::perform()
{
     dialog->setValue(steps);
     //... perform one percent of the operation
     steps++;
     if (steps > dialog->maximum())
         t->stop();
}

一系列更新,逐步增加进度值,将创建您想要的动画效果。

显然用Symbian标记它是完全错误的,这根本不是Symbian特有的。也不是Qt 4.x具体,地狱......它甚至不是Qt特定的,它基本上是一个逻辑问题。 ;)