Bonjour,

Je réalise un programme et je dois générer un des images (QImage) dans un thread à partir d'un fichier XML. Par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<book>
	<chapter>
		<page>
			<text>bla bla</text>
			<image path="illustration_intro.jpg" />
		</page>
	</chapter>
</book>
J'ai donc un code qui ressemble +- à ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void PageCreator::run()
{
    QImage *image = new QImage(Page::width, Page::height, QImage::Format_RGB32);
    QPainter painter(image);
 
    QPen pen(Qt::white);
    painter.setPen(pen);
 
    QFont font("Verdana", 15, QFont::Bold);
    painter.setFont(font);
 
    QDomNode node = pageNode.firstChild();
    while(!node.isNull())
    {
        if(node.toElement().tagName() == "text")
        {
           QString test = "boum";
           painter.drawText(10, 10, test);
        }
        else if(node.toElement().tagName() == "image")
        {
           QString path = node.toElement().attribute("path");
           painter.drawImage(0, 0, QImage(path));
 
        }
        node = node.nextSibling();
    }
 
    this->page = new Page(this->num, image);
}
Avec le dessin de l'image je n'ai aucun problème, par contre lorsqu'il rencontre de drawText(), là mon application se coupe et j'ai le message :

ASSERT: "qApp && qApp->thread() == QThread::currentThread()" in file kernel\qapp
lication_win.cpp, line 902

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
QObject::killTimers: timers cannot be stopped from another thread
Je n'ai trouvé de la documentation sur killTimers() uniquement pour Qt 3.3 (ici) alors que j'utilise Qt 4.5 et apparemment la méthode n'est plus disponible. Pour ceux que ça peut intéresser, voici le bout de code dans "gui\kernel\qapplication_win.cpp":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Q_GUI_EXPORT HDC qt_win_display_dc()                        // get display DC
{
    Q_ASSERT(qApp && qApp->thread() == QThread::currentThread());
    if (!displayDC)
        displayDC = GetDC(0);
    return displayDC;
}
Si je commente le drawText(), tout se passe parfaitement. Le drawPoint() ou drawRect() ne pose pas de problème non plus.

Merci de votre aide,
Sébastien