Задать вопрос

Как сгруппировать свойства (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 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 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...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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