Как сгруппировать свойства (PROPERTY) пользовательского виджета (custom widget plugin) для Qt Designer?

Использую Qt 5.3.1. Надо сделать свой виджет, который можно подложить Qt Designer'у. Qt для этого использует определенный термин: custom widget plugin. Одно из требований к нему - сделать возможность его настраивать в Designer'e, да еще и определенным образом. Надо сделать несколько групп свойств. Под группами (может быть, есть более корректный термин - говорите, не стесняйтесь) я имею в виду такие вот блоки данных: которые могут содержать bool, string, int и др значения.
4fe5a3895c75497eb24112e5ac296300.png

Нашел два пути задания свойств.
1) XML
Документация Qt
Выдержка оттуда:
QString AnalogClockPlugin::domXml() const
 {
     return "<ui language=\"c++\">\n"
            " <widget class=\"AnalogClock\" name=\"analogClock\">\n"
            "  <property name=\"geometry\">\n"
            "   <rect>\n"
            "    <x>0</x>\n"
            "    <y>0</y>\n"
            "    <width>100</width>\n"
            "    <height>100</height>\n"
            "   </rect>\n"
            "  </property>\n"
            "  <property name=\"toolTip\" >\n"
            "   <string>The current time</string>\n"
            "  </property>\n"
            "  <property name=\"whatsThis\" >\n"
            "   <string>The analog clock widget displays the current time.</string>\n"
            "  </property>\n"
            " </widget>\n"
            "</ui>\n";
 }

Но я не вижу способа связать свойство, которое я туда добавлю с атрибутами или методами виджета. А еще есть проблема с блоками типа "rect" - где описание к ним?

2) Q_PROPERTY
Виджет на Q_PROPERTY
Тут связка с виджетом логична и понятна. Но неизвестно как сделать группу.
class QDESIGNER_WIDGET_EXPORT LED : public QWidget
 {
   Q_OBJECT
 
   Q_PROPERTY(double diameter READ diameter WRITE setDiameter) // mm
   Q_PROPERTY(QColor color READ color WRITE setColor)
   Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
   Q_PROPERTY(bool state READ state WRITE setState)
   Q_PROPERTY(bool flashing READ isFlashing WRITE setFlashing)
   Q_PROPERTY(int flashRate READ flashRate WRITE setFlashRate)


Я в тупике. Кто-нибудь подскажет?
  • Вопрос задан
  • 3647 просмотров
Решения вопроса 1
@cerevra Автор вопроса
QDesignerPropertySheetExtension создает такие вот группы:
f5a2d905e25143798bbd79a652c40e67.png
И судя по всему, нужная мне группировка существует только для встроенных типов. Совершенно нездорово.
Спасибо за подсказанное направление
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tzlom
@tzlom
Рекомендую глянуть исходники QtCreator / QtDesigner, но начать можно отсюда:
https://qt-project.org/doc/qt-5/qdesignerpropertys...
https://qt-project.org/doc/qt-4.7/designer-creatin...
https://qt-project.org/doc/qt-4.7/qdesignerdynamic...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы