【问题标题】:Trouble with progressbar in QTQT中的进度条问题
【发布时间】:2010-02-18 12:43:05
【问题描述】:

我在为 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();

【问题讨论】:

    标签: qt qt4 symbian progress-bar


    【解决方案1】:

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

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

    QApplication a(argc, argv);
    
    QProgressDialog *dialog = new QProgressDialog();
    
    dialog->setMinimum(0);
    dialog->setMaximum(0);
    
    dialog->showMaximized(); 
    dialog->exec();   
    return a.exec();
    

    【讨论】:

    • 嘿,我明白了..感谢您的建议,事情是..您的代码也表现得像我上面的代码..在我的模拟器中,我得到了进度条,带有锯齿形样式..即虽然蓝色..但它的静态..我的意思是它不动..模拟器行为只是这样还是什么?
    • 嗯,我从来没有使用过 symbian,但这似乎是一个模拟器可以做的事情。能不能把它部署在一台真正的 symbian 机器上试试?
    • ya.. 我试试手机告诉你 :) 谢谢
    • 嘿..我在手机上试过。它没有动画.. 只是显示静态进度条
    【解决方案2】:

    如果您使用的是 Windows Vista 主题 (QWindowsVistaStyle),则存在一个错误,这意味着不确定的进度条不会动画。我在这里写了这个错误,并附上了简单的补丁:http://bugreports.qt-project.org/browse/QTBUG-10984

    【讨论】:

    • 我找到了问题的解决方案。我可以知道您使用的是哪个版本的 Qt?,Qt 说问题已在 Qt 4.6.2 中修复
    • 这对我来说在 4.7 技术预览版中出错了。也许这与您所看到的问题不同。
    【解决方案3】:

    伙计们,你认为进度条到底有什么作用?它应该向用户显示正在进行的活动以及当前的进度状态。

    你的代码

    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 特定的,它基本上是一个逻辑问题。 ;)

    【讨论】:

    • 其实这些天进度条也可以用来显示应用程序仍在做某事但进度无法估计。这是动画并称为选框模式(或骑士模式)。在 Qt 中将最小值和最大值设置为 0。
    • 有趣。谢谢你的提示。我在 Windows 上看到类似的东西,但它没有记录在案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多