Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt4] Question sur QStyle

Bonjour, je viens de lire la doc de "QStyle Class Reference"
N'est il pas possible de définir un style par css?
J'ai oxygen.dll, quand je le met dans C:\Qt\4.4.3\plugins\styles le designer le prend bien en compte, comment l'utiliser dans mon application?
J'ai que cette dll, et j'aimerai la mettre dans un sous dossier. Peu on l'appliquer dynamiquement ou est est obliger de restart l'application?
Voila pour mes interrogations, merci d'avance de vos réponses.
«1

Réponses

  • On ne peut pas appliquer un plugin de style par CSS, mais le changement de style peut être fait dynamiquement via QApplication::setStyle() ou QWidget::setStyle().
    En revanche, il te faut le nom de ce style pour pouvoir l'appliquer.

    Pour le distribuer avec ton application, vu qu'il s'agit d'un plugin, le fichier dll doit se trouver dans le sous-répertoire styles de ton application.
    - monappli.exe
    - styles\
    - oxygen.dll
  • December 2008 modifié
    Comment obtenir la liste des thémes dispo (au moins ceux de Qt)?

    J'ai bien placé la dll ou tu l'as dit mais quand je lance mon application par:
    ultracopier.exe -style oxygen
    Ca marche pas.
    J'ai essayé toute les variante de la ligne de commande.

    Ce serai super pour la prochaine version de pouvoir le faire par css.
  • Pour connaître la liste des styles dispo pour une application donnée, il faut utiliser la fonction QStyleFactory::keys().
  • How to Create Qt Plugins:
    Rien sur la raison du problème.
    J'arrive toujours pas à utilisé mon style :(
  • Peux-tu poster la dll quelque part que j'essaie.
  • Ah zut, je ne peux pas tester le plugin, je suis encore en 4.4.2 et il a été compilé en 4.4.3 release.
    D'ailleurs, si tu veux t'en servir, il faut que tu sois en 4.4.3+ et en release.
  • Oui je suis en QT 4.4.3 release, je vais quand même vérifier coté dll livré avec l'application.
  • Je suis en train de compiler Qt 4.4.3 pour mes besoins perso.
    Je restesterai
  • December 2008 modifié
    Ok merci. En faite vu que tu est en vc++ tu serai pas en 64Bits? Tu serai pas si c'est possible de compiler Qt en 64Bits? J'ai chopper la licence (par msdnaa, le truc pour étudiant) de visual studio c++ 2008 (ou 2009 je sais plus) en version 64Bits et donc aussi l'iso. Et j'ai bien envie de l'avoir en 64Bits mais aprés est on obligé de ce trainer avec les dépendances spécifique ou on peu faire un exécutable portable avec juste les dll Qt, un peu comme avec mingw?
    Je recompile, idem, question d'optimisation...
  • L'avantage du 64 bits est aujourd'hui relativement limité puisque le parc 64 bits de Windows XP et de Windows Vista ne représente même pas 2% des licenses installées... donc non, je ne suis pas en 64 bits. désolé.
  • Moi je suis en 64Bits contre les virus (eux aussi son majoritairement en 32Bits). Et windows est le seul qui traine à passé en 64Bits. Et c'est toujours mieux de proposé une version 64Bits surtout que j'ai du inclure une dll 64Bits pour l'interception des copier coller des OS 64Bits.
    Si non coté portabilité des exécutable généré? juste les dll de Qt à fournir avec l'exe et c'est bon?
  • A priori, si tu compiles avec MinGW et le support multi-threads et les exceptions, il te faut une DLL de MinGW en plus.
    Avec Visual C++, il faut le Visual C++ Redistribuable dans la bonne version en fonction du compilateur utilisé.
  • Oui mais avec je met la dll ou je fait Qt à la main et hop c'est tout.
    Alors qu'avec vc++ il faut INSTALLER vc++ redistribuable, et donc pour une version portable sur clef usb on peu pas ce permettre d'installer sur tout les post l'application, surtout que dans certain cas j'aurai pas les droits.
  • Il suffit de copier la DLL en question, qui est mingwm10.dll

    Décidément, ton plugin de style ne va pas fonctionner chez moi. Il faudrait que je le recompile avec ma version. As-tu les sources ?
  • Non mais je l'ai tirer de KDE pour windows, les sources doivent donc existé. Par contre je sais ni ou ni comment.
    Ce qui est bizard c'est que ça marche en externe avec le designer officiel, et moi je veux et je doit arrivé à la faire marché en dll.
    Faudrait trouver dans le code source du designer ou il remplit la liste des styles (avec les vrai nom et les espace et majuscule), comment il l'applique, et si il ajoute des path spécial.
    Je vais alors tester vc++. Il m'intéresse, juste pour voir ce que c'est vu que j'ai la licence autant jeter un coup d'oeuil.
  • Je crois que tu n'as pas compris le problème...
    Le plugin marche avec le designer parce que ton designer a été compilé à partir de Qt4.4.3 avec mingw et en release.

    Ce plugin de style est inutilisable avec une application non compilée avec mingw ou avec une version antérieure de Qt. En l'occurence dans ces cas-là, le plugin loader de Qt renvoie des informations qui indiquent les raisons de l'échec du chargement.

    Donc, Ok, tu es en 4.4.3, mais visiblement, ton application ne doit pas être compilée en release (ou les libs Qt) pour qu'il n'arrive pas à le charger.
  • Il existe aussi KDE compiler en version vc++. Le choix ce fait à l'install:
    http://www.winkde.org/pub/kde/ports/win32/installer/
    En passant tu peu tester le bureau plasma de KDE4 sous windows, idem pour konqueror et tout les autres outils KDE qui s'intègre super bien sous windows.

    Si application en mode release + dll officiel.
  • Merci mais KDE ne m'intéresse pas.
  • December 2008 modifié
    Je devrai pas utiliser?
    QLibraryInfo::location(QLibraryInfo::PluginsPath)
    QCoreApplication::addLibraryPath()
    Je teste en retrant chez moi, mais je pense pas que ce soit ça.

    Q_IMPORT_PLUGIN(qjpeg)
  • Essaie de charger le plugin via QPluginLoader.
    La classe a une fonction errorString qui te donnera la raison du mauvais chargement.
  • Ok je poste ce soir pour te dire la solution ou le bug.
  • Comment on vire un QApplication::setStyle() pour revenir sur le style par default?
  • December 2008 modifié
    Faut juste faire ça:
        QPluginLoader pluginOxygen("oxygen.dll");
    pluginOxygen.load();
    QMessageBox::critical(NULL,"debug",pluginOxygen.errorString());
    ?
  • Voila le message d'erreur avec les informations qui vont bien:
    http://files.first-world.info/temp/bug-fichier.png
  • December 2008 modifié
    Dans les sources de Qt j'ai peu étre la solution par:
    tools/designer/src/lib/shared/previewconfigurationwidget.cpp
    ou
    tools/designer/src/lib/shared/previewmanager.cpp

    Pour étre plus précis, je pense à ici:
    QActionGroup *PreviewManager::createStyleActionGroup(QObject *parent, QMenu *subMenu)
    {
    QActionGroup * rc = new QActionGroup(parent);
    rc->setExclusive(true);

    const QStringList styles = QStyleFactory::keys();
    const QStringList::const_iterator cend = styles.constEnd();

    // Make sure ObjectName is unique in case toolbar solution is used.
    const QString objNamePrefix = QLatin1String("__qt_designer_style_");
    const QString objNamePostfix = QLatin1String("_action");
    for (QStringList::const_iterator it = styles.constBegin(); it != cend ;++it) {
    QAction *a = new QAction(tr("%1 Style").arg(*it), parent);
    QString objName = objNamePrefix;
    objName += *it;
    objName += objNamePostfix;
    a->setObjectName(objName);
    a->setData(*it);
    rc->addAction(a);
    if (subMenu)
    subMenu->addAction(a);
    }
    return rc;
    }
    }

    Et après il charge le style en externe, peu être grâce à ça:
    tools/designer/src/lib/extension
  • En utilisant un chemain sans espace sous windows et en testant sous linux j'ai un "Unknow error"
  • J'ai passer le week end à chercher, j'ai pas trouvé.
  • Pour le style par default j'ai je pense trouver ce qui me vas:
    QStyle * QApplication::style () [static] pour ensuite restaurer le style de base.
    Oxygen est bien lister dans mon application Qt quand elle est dans le dossier de Qt, et pas dans le dossier de mon application.
  • Non ça marche pas :( , vu que Qtyle est une classe abstraite, pas moyen de stocker le style par default pour le reset aprés.
Connectez-vous ou Inscrivez-vous pour répondre.