- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我从一个循环(进行一些计算)发出信号,触发位于主 GUI 上的进度条更新,循环结束后进度条更新为 100%(进程结束时进度条隐藏) ,但是有延迟,进度条保持在 100%,有时鼠标变为忙碌,只有几秒钟后进度条才隐藏(表明延迟结束),循环之后没有任何东西,所以我能想到的任何事情都不能造成这种延迟。
发射信号在逻辑层的一个类中,我已经通过包含 <QtGui/QApplication>
来尝试一些东西进入那个类(在我看来这不是正确的做法,因为这是逻辑层所以它为什么需要 QtGui 库,但我只是在测试一些东西),我把下面的代码 qApp->processEvents();
在循环中,现在事情似乎变得令人窒息,没有忙碌的鼠标,但仍然存在延迟(唯一不同的是,当发生这种延迟时,我可以对 GUI 使用react,但在这种延迟结束之前没有更新的结果)。
因为测试了 processEvents()
我以为它与线程有关,但如果是这样,我该如何纠正延迟行为,当然,如果有人认为它可能是其他原因,请告诉我。
一些示例代码:
逻辑层类:
#include <QtGui/QApplication>
...
processMethod(...)
{
Loop(...)
{
qApp->processEvents();
emit processBarSignle(value);
...some calculations...
}
emit processBarSignle(100);
}
View 层(主窗口):
on_btn_nextProcess_clicked()
{
m_ui->pBar_process->setVisible(true);
LogicClass->processMethod(...);
m_ui->pBar_process->setVisible(false);
}
谢谢
最佳答案
尝试以下操作:
#include <QtCore/QCoreApplication>
...
processMethod(...)
{
Loop(...)
{
emit processBarSignle(value);
QCoreApplication::processEvents();
...some calculations...
}
emit processBarSignle(100);
QCoreApplication::processEvents();
}
processEvents()
是 QCoreApplication 的静态方法, 这样只包含 QCoreApplication
就足够了,它是 QtCore
库的一部分。
此外,您应该在进度条更新之后添加 processEvents()
,而不是在此之前。
注意 processEvents()
直到 Qt 事件队列中的每个事件都被处理后才会返回。如果有例如Cancel
按钮,您必须在每次调用 processEvents()
时检查用户是否真的取消了操作。
您可以使用
QCoreApplication::processEvents( QEventLoop::ExcludeUserInputEvents )
但这将不允许在循环处于事件状态时单击任何内容(例如取消按钮)。
作为进一步说明:它应该被称为“processBarSi ng le”;-)
关于线程等的说明:
你的整个循环,以及任何鼠标点击等都只在一个线程中执行。如果您调用 emit()
,则连接到该 signal
的 slot
会立即执行(除非该 slot 实际上位于不同的线程)。与此同时,循环不会继续!
当插槽结束时,您的循环将继续。在我的示例中,这意味着 processEvents()
将被调用。现在,如果您的插槽更新了进度条或执行了导致重绘的任何其他操作,事件队列中将有一个重绘事件,并且现在将进行重绘。
如果您在调用插槽之前执行 processEvents()
,此时将不会有可以处理的重绘事件。
再一次,循环不会继续,直到 processEvents()
完全完成。处理完所有未决事件后,循环将继续您的计算。
关于c++ - QProgressBar 完成加载后无法解释的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398050/
我正在尝试创建一个 QProgressBar 来指示执行一个我不知道执行前需要多长时间才能完成的操作。 现在我有以下内容 QProgressBar DLbar; DLbar.setMaximum(0)
我更新进度条的第一个天真是在我的循环中包含以下行,它正在执行处理,如下所示: while(data.hasMoreItems()) { doSomeProcessing(data.nextIt
我开发了自己的混合流密码,并且我使用 Qt 作为 GUI。最初我是在一个线程上写的,但它是一个流密码,在对大文件进行操作时使 GUI 功能失调。所以我将加密/解密转移到一个单独的 Qthread。另外
几天,也许几周,我一直在寻找我的应用程序中的内存泄漏。在找到这个之前,我没有找到它的位置: https://bugs.kde.org/show_bug.cgi?id=292217 检查了一切,我发现Q
我的任务很重。我创建了 QProgressBar 来显示该程序仍在工作,并使用 c++ std::thread 类在另一个线程中运行繁重的任务。但是 QProgressBar 不起作用,只有带有 QP
我想要一个垂直进度条,里面有垂直(从上到下)的文本。我想知道是否以及如何使用样式表来实现这一点。我无法更改整个应用程序的样式或完全更改小部件的样式(没有“应用可用的塑料样式解决方案”)。有人可以给我提
我从一个循环(进行一些计算)发出信号,触发位于主 GUI 上的进度条更新,循环结束后进度条更新为 100%(进程结束时进度条隐藏) ,但是有延迟,进度条保持在 100%,有时鼠标变为忙碌,只有几秒钟后
我有一些不寻常的问题:为了可视化打包进度,我考虑使用 qprogressbar 在一个栏中包含两个值 - 一个显示读取的字节,另一个显示写出的字节,这也给出了关于压缩比的想象。 QT4 可以吗? 另外
我正在 QT 中开发一个 GUI,它根据用户输入执行一些繁重的计算。我在一个函数中进行所有计算,比如 start_computation() ,因为 start_computation() 函数被称为
我正在尝试使用进度条 qt creator 作为电池图像,因此我需要能够控制进度条(使用一个名为 my_value 的变量,我将在之后更改该变量)。更准确地说,我希望能够从程序中设置进度条的值,并让它
我有一个日记程序,用户可以在其中创建任务,然后为其添加休息时间。每个 Task 对象都有一个 QTime start_time、QTime end_time 和 Break 的 vector .每个
我正在尝试改变垂直对齐的 QProgressBar 的颜色 我在这里找到了如何通过 setStyleSheet 改变颜色的例子: Changing the color of a QProgressba
我在状态栏中显示进度条,但它并没有很好地对齐。如果可能的话,我希望它显示为中心对齐,或者至少在左侧有一些边距,我正在附上快照。 我遇到的第二个问题是我希望它显示文本但没有显示文本。 _progress
我使用QProgressBar来显示下载操作的进度。我想在显示的百分比中添加一些文本,例如: 10%(下载速度kB/s) 有什么想法吗? 最佳答案 使 QProgressBar 文本可见。 QProg
我有一个 PyQT GUI 应用程序 progress_bar.py,带有一个进度条和一个带有 process_files() 函数的外部模块 worker.py它对文件列表执行一些例程,并使用 pe
我想通过使其变薄来自定义QProgressBar外观。有一个 setMaximumHeight() 方法可用。但不幸的是,进度条的高度被削减(或剪辑),使其看起来很奇怪。相反,我宁愿垂直挤压或缩放它。
我正在使用 QProgressBar并且已经弄清楚如何使用此过程从逻辑层中的特定类发送进度: 在 View 层类中设置连接。 在逻辑层类中创建信号信号。 修改逻辑层类,使其成为 QObject。 调用
我想知道是否有办法自定义进度条的颜色(QtGui.QProgressBar)。假设我们希望在条形图达到 100% 时将其变为绿色。 这是一个工作示例: import sys, time from Py
实际上,我在 QProgressBar 上设置了一个图像,并希望根据 QProgressBar 的选定部分更改图像的颜色。 我尝试用 QProgressBar 颜色覆盖我的图像,但这填充了图像,但由于
我是 Qt 的初学者,我正在尝试为我的应用程序的 gui 显示进程栏。我写了下面的代码 void my_app::progress() { int val=1; while(process.s
我是一名优秀的程序员,十分优秀!