Qt崩溃/当我使用Qthread::sleep更新进度条时没有出现
Qt crashes/doesn't appear when i use Qthread::sleep to update progress bar
我对QT有点陌生,所以我想知道为什么这是无效的:
我有一个进度条,我想通过使用继承QThread
的类来更新它。
void mt::run(QProgressBar * asd){
for(int i = 0;i<100;i++){
asd->setValue(i);
QThread::sleep(100);
}
}
mt是继承QThread
的类。run
被QProgressBar
参数重载。我的主UI线程会像这样发送它的进度条m.run(ui->progressBar);
。如果我将删除QThread::sleep(100);
,那么它将工作得很好,但我将无法看到增量,因为线程将做得如此之快。但是如果我延迟一点,屏幕就不会出现了
您只能从主线程访问和更新GUI元素。
如果你想在自定义线程中准备一些数据,你应该使用信号/插槽机制将这些数据发送给你的小部件。
下面是一个基本的例子:
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread(QObject *parent = 0);
signals:
void valueChanged(int value);
protected:
void run();
}
void MyThread::run()
{
for (int i = 0; i < 100; i++)
{
emit valueChanged(i);
QThread::sleep(100);
}
}
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent)
{
QHbovLayout *layout = new QHbovLayout(this);
QProgressBar *pb = new QProgressBar;
layout->addWidget(pb);
MyThread *t = new MyThread(this);
connect(t, SIGNAL(valueChanged(int)), pb, SLOT(setValue(int)));
t->start();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// we are in the main thread here, so we can create a widget
MyWidget w;
w.show();
return a.exec();
}
QThread::sleep(100);
你让它睡100秒——这是相当长的一段时间。也许你指的是QThread::msleep(100)
?
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 在 emscripten 网页汇编正在运行期间更新进度条?
- Qt崩溃/当我使用Qthread::sleep更新进度条时没有出现