Как узнать, что виджет в данный момент работает в Qt Designer - PullRequest
1 голос
/ 27 июля 2010

Как я могу в коде пользовательского виджета Qt знать, что он в данный момент создается в Qt designer?

Вариант использования:

Я создаю сложный пользовательский виджет, который имеет несколько дочерних виджетов, таких как QPushButton, QLabel и т. Д.

Как требует логика приложения, при создании виджета большинство этих подкомпонентов не видны, но во время разработки, когда я помещаю их в форму, я бы хотел их видеть.

Чтобы иметь возможность играть с таблицей стилей во время разработки. В настоящее время то, что я получаю, является пустым, это только результат конструктора - минимальное представление (фактически пустое в моем случае).

То, что я ищу, это уметь делать что-то вроде

MyQWidget::(QWidget *parent)
{
 ....
   if(isRunningInDesigner())
   {
      myChildWidget1->setVisible(true);
      myChildWidget2->setVisible(true);
      myChildWidget3->setVisible(true);
   }
   else
   {
      myChildWidget1->setVisible(false);
      myChildWidget2->setVisible(false);
      myChildWidget3->setVisible(false);
   }
....
}

Так что я должен вставить в этот bool isRunningInDesigner () ?

1 Ответ

1 голос
/ 28 июля 2010

Из руководства пользователя Qt Designer :

Чтобы предоставить настраиваемым виджетам особое поведение в Qt Designer, предоставьте реализацию функции initialize () , чтобы сконфигурировать процесс создания виджетов для специфического поведения Qt Designer. Эта функция будет вызываться в первый раз перед любыми вызовами createWidget () и, возможно, может установить внутренний флаг, который можно будет проверить позже, когда Qt Designer вызовет функцию плагина createWidget () .

Это методы из интерфейса плагина QDesignerCustomWidgetInterface . Вкратце: вы говорите виджету вести себя по-другому, когда Qt Designer просит ваш плагин создать экземпляры вашего пользовательского виджета.

...