Come gestire scelta item proprietà mio plugin in Qt 6.5
-
Sto usando Visual Studio C++ 2022 Community con VS Tools per Qt. Ho creato un plugin di nome Led_0_6_1 basato sul vecchio progetto di P. Sereno. Il plugin funziona, unico problema che presenta quando si vuole cambiare forma al led dal pannello di Qt Designer (vedi immagine allegata). Quando seleziono per esempio Triangle, non cambia forma e rimane sempre Circle. Il problema è dovuto al fatto che ogni variazione fatta sull'editor delle proprietà mie del widget (nel caso specifico shape) non aggiornano il file .ui che quindi continua a farmi vedere il solo presente nel file .ui che è appunto Circle. Come si deve fare affinchè si aggiorni il file .ui dopo aver selezionato Triangle nella proprietà shape ?
-
Di seguito riporto il mio codice.
Led_0_6_1Plugin.cpp:#include "Led_0_6_1.h" #include "Led_0_6_1Plugin.h" #include <QtCore/QtPlugin> using namespace Qt::StringLiterals; Led_0_6_1Plugin::Led_0_6_1Plugin(QObject *parent) : QObject(parent) { initialized = false; } void Led_0_6_1Plugin::initialize(QDesignerFormEditorInterface * /*core*/) { if (initialized) return; initialized = true; } bool Led_0_6_1Plugin::isInitialized() const { return initialized; } QWidget *Led_0_6_1Plugin::createWidget(QWidget *parent) { return new Led_0_6_1(parent); } QString Led_0_6_1Plugin::name() const { return "Led_0_6_1"; } QString Led_0_6_1Plugin::group() const { return "My Plugins"; } QIcon Led_0_6_1Plugin::icon() const { return QIcon(); } QString Led_0_6_1Plugin::toolTip() const { return QString(); } QString Led_0_6_1Plugin::whatsThis() const { return QString(); } bool Led_0_6_1Plugin::isContainer() const { return false; } QString Led_0_6_1Plugin::domXml() const { return uR"( <ui language="c++"> <widget class="Led_0_6_1" name="led_0_6_1"> )" R"( <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>50</width> <height>50</height> </rect> </property> ") R"( <property name="toolTip"> <string>Binary Led</string> </property> <property name="value"> <bool>false</bool> </property> <property name="whatsThis"> <string>Led widget</string> </property> <property name="onColor"> <enum>Led_0_6_1::Red</enum> </property> <property name="offColor"> <enum>Led_0_6_1::Grey</enum> </property> <property name="shape"> <enum>Led_0_6_1::Circle</enum> </property> </widget> </ui> )"_s; } QString Led_0_6_1Plugin::includeFile() const { return u"Led_0_6_1.h"_s; }
Led_0_6_1Plugin.h:
#pragma once #include <QtUiPlugin/QDesignerCustomWidgetInterface> class Led_0_6_1Plugin : public QObject, public QDesignerCustomWidgetInterface { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface" FILE "led_0_6_1plugin.json") Q_INTERFACES(QDesignerCustomWidgetInterface) public: Led_0_6_1Plugin(QObject *parent = nullptr); bool isContainer() const override; bool isInitialized() const override; QIcon icon() const override; QString domXml() const override; QString group() const override; QString includeFile() const override; QString name() const override; QString toolTip() const override; QString whatsThis() const override; QWidget *createWidget(QWidget *parent); void initialize(QDesignerFormEditorInterface *core); private: bool initialized; };
-
Il problema apparentemente non sembra essere il codice ma l'ambiente di sviluppo che utilizzo: 6.5.0_msvc2019_64, Qt Creator basato su Visual Studio C++ 2019 (la versione che ho di Visual Studio C++ è la Community 2022) con estensioni | Qt VS Tools. Questo era un vecchio problema di Qt già risalente alla 4.7.x con lo stesso plugin che ho presentato nel post. Allora ero riuscito a farlo funzionare correttamente in Qt Designer basato su MinGW 4.8. Altri avevano provato ad usarlo in Visual Studio C++ ma non riuscivano a impostare la forma del led dalle proprietà di Qt Designer, proprio come succede a me. Per caso qualcuno è riuscito a farlo funzionare in Qt Designer (il cambio di form corrisponde ad una diversa visualizzazione del led sulla form che si sta disegnando in Qt Designer) ? Se sì, potete dirmi quale versione di Qt Creator, Qt Designer usate e con quale ambiente di compilazione (MinGw quale versione, Visual Studio C++ quale versione) ?
-
@giorgik63 Facendo un paio di controlli, mi sono accorto che Qt Designer (dell'installazione online di Qt 6.5) è stato compilato facendo uso di una versione delle librerie diversa dalle 6.5. Quindi tutto ciò che si fa con essa non può "vedere" i plugin creati con Qt Creator basato sulle 6.5. Quindi sono passato ad un'installazione dell'ambiente Qt (Qt Creator e Qt Designer) basata sulla stessa versione: 6.4.3. Per sicurezza ho poi seguito un tutorial che mi spiega passo passo la creazione di un semplice plugin. Ed ora sembra funzionare, vedo il plugin in Qt Designer. C'è solo un problema, se creo un progetto per testare il plugin nuovo, non riesco a compilarlo perchè mi da un errore di questo tipo:
Sembra che manchi qualche riferimento al plugin, ma nel mio .pro dell'applicazione, viene riportato tutto (.lib, .h)
a questo punto non so più cosa fare veramente. Aiutatemi.