QLabel慢慢显示图像

时间:2014-05-21 13:37:58

标签: image qt

我开发了一个图像浏览器,用QSlider显示图像系列。我将QSlider的valueChanged(int)赋予自定义函数:

QObject::connect(ui.imgIndexSlider, SIGNAL(valueChanged(int)), this,SLOT(onimgIndexSliderValueChanged(int)));

当我拖动滑块时,QLabel显示的图像将被QSlider值更改。它可以工作。但是有一个问题,如果你快速拖动,应用程序将无法运行。 你能告诉我如何解决这个问题。 非常感谢你。

the UI of my appliction

1 个答案:

答案 0 :(得分:0)

您的问题并不清楚,但我假设您正在使用滑块显示幻灯片等图片。当你快速滑动你的应用程序时会被窒息,即冻结? Qt正在GUI线程中渲染图像。 如果图像都是高分辨率,那么渲染每个图像将花费更多的时间。 当您滑动的速度超过Qt可以渲染单个图像时,您遇到问题。 所以,如果我在你的位置,这就是我理想的做法:

  1. 实现自定义算法,该算法将读取图像文件和 创建更小尺寸的预览图像。既然你是 在内存中生成像素图,您可以通过多线程来完成。 您可以在启动应用程序时执行此操作。
  2. 在左窗格中将所有预览显示为可滚动的图块,类似于 微软幻灯片软件。你可以通过让Qt渲染来减少一些编码 这些预览使用QLabel
  3. 拥有占据窗口主要部分的中央窗口小部件 这将使用您的自定义算法渲染图像。您的 如果算法将会读取实际图像 滑块未运行。如果滑块足够快地运行,那么您只需要 缩放预览图像并在小部件中显示。
  4. 如果您发现任何难以理解的内容,请随时提出问题。 :)