2009-10-21 1 views
0

Je travaille sur le projet QT GUI. Dans cette application j'ai un QWidget comme fenêtre principale. Je fais le curseur à partir des données provenant de certaines sources. Quand je mets le curseur du widget. Cela me donne l'erreur suivante. QPixmap: Il est sûr à utiliser pixmaps en dehors du fil GUI Mon code est le suivantComment définir le curseur QWidget en dehors du thread GUI

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(); 

}

Fonction setMouseCursor est appelée à partir d'autres classes, qui ensemble les données du curseur. ImageWindow est ma classe QWidget personnalisée.

Répondre

3

Apparemment, l'objet qui appelle setMouseCursor vit en dehors du thread de l'interface graphique autant que je peux dire. Pour éviter cela, faites de setMouseCursor un slot. N'appelez pas l'emplacement directement, mais émettez un signal à partir de l'objet appelant et connectez ce signal à l'emplacement setMouseCursor en utilisant Qt :: QueuedConnection.

Voir: ConnectionType

1

Deux problèmes:

  • ne pas utiliser un QBitmap en dehors du GUI-fil
  • n'objets appelle pas en dehors de l'interface utilisateur graphique setCursor GUI-fil

Creating a Paint Device
L'un des avantages de l'utilisation de QImage en tant que périphérique de peinture est qu'il est possible de garantir l'exactitude des pixels de toute opération de dessin de manière indépendante de la plate-forme . Un autre avantage est que la peinture peut être effectuée dans un autre fil que le fil d'actualité .