Bonjour,

j'ai repris un vieux code développé en Qt4.8 à partir du livre avec lequel j'ai découvert Qt [Qt4 et C++ - programmation d'interfaces GUI]. Le code a été développé sous Windows, puis pendant mes actuelles vacances, je l'ai amélioré et testé en Qt 5.7. A priori, il est difficilement portable en Linux. Je ne l'avais jamais vérifié en Linux. C'est la première fois que je me heurte à un tel problème. J'ai déjà différencié des codes sous divers OS par exemple pour la recherche du "HD serial number" mais là je ne m'attendais à rencontrer ce problème.

L'objet est un délégué de QTableView pour afficher du HTML.
Nom : 011.PNG
Affichages : 228
Taille : 58,5 Ko

La partie (ancienne) de code incriminée est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
void HTMLdelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionViewItem optionV4 = option;
    initStyleOption(&optionV4, index);
 
    QStyle *style = optionV4.widget? optionV4.widget->style() : QApplication::style();
 
    QTextDocument doc;
    doc.setHtml(optionV4.text);
    doc.setTextWidth(optionV4.rect.width());
...
J'ai bien vu sous Windows que le code était déclaré comme obsolète, que Paint est virtual. Le code ne déclare pas d'erreur en Qt5.7 MingGw 53_32.

Sous Ubuntu 16.04 avec un Qt 5.7 GCC64, j'obtiens l'erreur suivante :
/home/untel/slzQtdevs/TableViewHTML16/htmldelegate.cpp:29: erreur : 'class QStyleOptionViewItem' has no member named 'widget'
QStyle *style = optionV4.widget? optionV4.widget->style() : QApplication::style();
*»»»»»»»»»»»»»»»»»»»»»» ^
En effet widget n'existe pas mais pourquoi est-ce que cela passe en windows ? Et comment contourne-t-on le problème en linux ?
J'ai pensé initialement que le compilateur gcc était réglé plus strictement que le mingw. Mais je n'ai rien vu de particulier.Nom : 012.png
Affichages : 232
Taille : 123,5 Ko

Merci pour votre aide.
Cordialement. AD.