C++ 中带有 Gtkmm 的 ProgressBar

Posted

技术标签:

【中文标题】C++ 中带有 Gtkmm 的 ProgressBar【英文标题】:ProgressBar with Gtkmm in c++ 【发布时间】:2017-08-09 09:53:58 【问题描述】:

您好,我知道如何使用 Gtkmm 创建进度条。我还知道一个按钮,例如,当我单击按钮时,progressBar 如何增加 10%。但我不知道如何实现自动增加的progressBar 我的意思是这样的:

for(int i = 0; i<=10; i++)

        double percentage(progressBar.get_fraction() + 0.1);
        progressBar.set_fraction(percentage);
        getchar();
 

但我看不到progressBar何时增加...我只看到progressBAr何时已满...

感谢您的帮助!

【问题讨论】:

C 不是 C++。请不要使用不相关的语言标签发送垃圾邮件。 你使用多少线程?这个循环是否在也负责 UI 更新的主线程中执行? 这里有更新吗? @Gerhardh 在***,他们不在乎c 和c++ 是两种不同的语言。所以停止垃圾邮件,c和c ++是不一样的。 :P 我试图删除同时引用 c 和 c++ 的标签,但我被不懂蹲的版主阻止了。这是他们的习惯! 【参考方案1】:

当您想要使用实际改变其外观的进度条(或微调器等)时,您需要确保主线程有时间相应地更新 UI。

如果您在主线程中有一个循环设置新值并阻塞getchar() 中的线程,则此线程无法更新 UI 以反映任何小部件的新状态。

要查看您的更新,您应该在其他线程中移动调用getchar 的循环,并且只在主线程中调用gtk_* 函数。这可以通过g_idle_add() 对更新函数进行入队来实现。

然后可以在线程被阻塞时更新 UI。

如果您将 getchar 替换为需要一些时间的其他操作,则此其他活动也会阻止线程更新 UI,除非您将其移动到其他线程中。

您还可以考虑在更新小部件状态之间将控制权返回给主线程的其他机制。

【讨论】:

以上是关于C++ 中带有 Gtkmm 的 ProgressBar的主要内容,如果未能解决你的问题,请参考以下文章

将 C 中的 gtk3 与 C++ 中的 gtkmm 结合起来

在 Eclipse 中为 C++ 设置 GTKmm

C++ GTKmm - 如何获取我的 TextView (TextBuffer) 的内容

C++ GTKMM,在文本缓冲区中得到一个奇怪的输出

C++ gtkmm:FileChooserDialog 不适用于任何驱动器

我应该学习 GTK+ 还是 GTKMM?