Доступ к дочерним элементам пользовательского интерфейса в пользовательском интерфейсе Qt - PullRequest
3 голосов
/ 22 декабря 2009

Я определил пользовательский интерфейс (назовем его myUI) с помощью дизайнера Qt и использовал его в своих приложениях. Мне нужно получить доступ ко всем подвиджетам (QToolButton s) в myUI. Я хочу получить все подвиджеты как QObjectList.

Есть ли способ сделать это?

QObject::children() здесь не работает, поскольку компилятор пользовательского интерфейса Qt при преобразовании файла .ui в класс C ++ не определяет класс ui_myUI как подкласс любого производного класса QObject. Есть ли способ заставить его сделать это, а затем использовать функцию children()?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 22 декабря 2009

Вызовите children() в экземпляре виджета верхнего уровня.

Предполагая, что ваш виджет верхнего уровня называется 'tlWidget':

myUI->tlWidget->children()

1 голос
/ 22 декабря 2009

Обычно происходит то, что вы либо наследуете от класса пользовательского интерфейса, либо используете его в качестве члена и вызываете его метод setupUi, отправляя this в качестве параметра. По умолчанию в Qt Creator / Designer это имеет членство с именем ui.
Вы можете использовать этот член для доступа к любым виджетам, указанным в вашей форме.

0 голосов
/ 22 декабря 2009

Как вы используете свой интерфейс?

(а) что-то вроде:

class MyWidget: public QWidget, protected myUI 
{
//...
};

(б) или скорее что-то вроде:

class MyWidget: public QWidget
{
protected:
    myUI ui;
};

Решение одинаково для обоих случаев, предполагается, что вы вызываете setupUi(this) или ui.setupUi(this) в конструкторе MyWidget

setupUi (QWidget * p) регистрирует каждый виджет пользовательского интерфейса как дочерний элемент QWidget p, так что вы можете легко получить к ним доступ, вызвав функцию children () из p:

this->children(); //"this" refers to an object of MyWidget
0 голосов
/ 22 декабря 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...