Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt:在主线程中强制更新UI_Qt_User Interface_Updates - Fatal编程技术网

Qt:在主线程中强制更新UI

Qt:在主线程中强制更新UI,qt,user-interface,updates,Qt,User Interface,Updates,我正在编写一个图像查看器,我想在显示当前图像后预加载下一个图像 现在的问题是:当我显示一个图像(例如,通过将QPixmap应用于QLabel)并在相同的Qt方法调用中加载下一个图像(例如,在相同的函数中)时,预加载后将显示图像。所以我还有时间差距 我可以切换到线程解决方案,但这会带来更多的问题 所以我现在的问题是:我可以强制Qt在当前调用堆栈中对UI进行update()/redraw()吗?还是必须找到一种方法在另一个“元调用”中进行预加载?我会尝试用以下方式解决问题(不处理线程): 您可以注册

我正在编写一个图像查看器,我想在显示当前图像后预加载下一个图像

现在的问题是:当我显示一个图像(例如,通过将
QPixmap
应用于
QLabel
)并在相同的Qt方法调用中加载下一个图像(例如,在相同的函数中)时,预加载后将显示图像。所以我还有时间差距

我可以切换到线程解决方案,但这会带来更多的问题


所以我现在的问题是:我可以强制Qt在当前调用堆栈中对UI进行
update()
/
redraw()
吗?还是必须找到一种方法在另一个“元调用”中进行预加载?

我会尝试用以下方式解决问题(不处理线程):


您可以注册一个自定义文件并使用它来触发下一个图像的预加载(假设您真的不想使用线程)。这是一个好主意,但我怀疑它是否有效。我尝试了
QMetaObject.invokeMethod
(基本上与触发事件相同)但是,由于我已经在主事件循环中,因此在调用我调用的函数后仍将进行更新。.学习线程的好时机。请注意,
QMetaObject.invokeMethod
仅在指定为连接类型时才保证使用事件循环。你就是这么想的吗?
void setCurrentImage()
{
    [..]
    label->setPixmap(pixmap);
    QTimer::singleShot(0, this, SLOT(preloadNextImage()));
    [..]
}

// A slot.
void preloadNextImage()
{
    // Do preload.
}