我正在研究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类。
答案 0 :(得分:3)
显然,就我所知,调用setMouseCursor的对象生活在GUI线程之外。为了避免这种情况,请将setMouseCursor设为一个插槽。不要直接调用插槽,而是从调用者对象发出信号,并使用Qt :: QueuedConnection将该信号连接到setMouseCursor插槽。
请参阅:ConnectionType
答案 1 :(得分:1)
两个问题:
setCursor
Creating a Paint Device
使用QImage作为一个优点 油漆装置是有可能的 保证任何像素的准确性 绘图操作 平台无关的方式。另一个 好处是画可以 在另一个线程中执行 当前的GUI线程。