如何在GUI线程外设置QWidget游标

时间:2009-10-21 07:01:32

标签: qt

我正在研究QT GUI项目。在这个应用程序中,我有一个QWidget作为主窗口。我根据来自某些来源的数据制作光标。当我设置小部件的光标。它给了我以下错误。 QPixmap:在GUI线程之外使用pixmaps是不安全的 我的代码如下

void ImageWindow::setMouseCursor(unsigned char* data,unsigned char* maskbits,unsigned int length,int xHotSpot, int yHotSpot)

{

QBitmap bitmapData;
QBitmap bitmapMaskData;
bitmapData.loadFromData(data,length);
bitmapMaskData.loadFromData(maskbits,length);

this->setCursor(QCursor(bitmapData,bitmapMaskData,xHotSpot,yHotSpot));
this->update();

}

函数setMouseCursor是从其他类调用的,它设置了游标的数据。 ImageWindow是我定制的QWidget类。

2 个答案:

答案 0 :(得分:3)

显然,就我所知,调用setMouseCursor的对象生活在GUI线程之外。为了避免这种情况,请将setMouseCursor设为一个插槽。不要直接调用插槽,而是从调用者对象发出信号,并使用Qt :: QueuedConnection将该信号连接到setMouseCursor插槽。

请参阅:ConnectionType

答案 1 :(得分:1)

两个问题:

  • 不要在GUI线程之外使用QBitmap
  • 不要在GUI-thread
  • 之外调用gui对象setCursor
  

Creating a Paint Device
  使用QImage作为一个优点   油漆装置是有可能的   保证任何像素的准确性   绘图操作   平台无关的方式。另一个   好处是画可以   在另一个线程中执行   当前的GUI线程。