Qt, получить данные внутри дочернего виджета из другого дочернего виджета

Я создаю новый виджет CAD в главном окне:

glWidget = new MeshViewerWidget(this);

а затем мой текстовый виджет:

tbl = new tableView( this );

в моем главном окне я могу получить свою сетку с помощью:

glWidget->mesh();

Как мне получить его в моем tableview.cc? ты


person pazduha    schedule 18.04.2012    source источник
comment
Я использую Qt из python с использованием PySide, поэтому я не могу дать вам код C++, но принципы те же. Табличное представление подкласса с настраиваемым конструктором, который принимает дополнительный параметр, поэтому вы можете передать сетку при создании экземпляра табличного представления. В качестве альтернативы добавьте метод setMesh в подкласс tableview и передайте сетку таким образом.   -  person Simon Hibbs    schedule 18.04.2012


Ответы (1)


Вы можете использовать функцию findChildren компонента QObject и получить список все дочерние элементы виджета, которые могут быть приведены к данному типу. Например

QList<QTableView*> allTableViews = glWidget->findChildren<QTableView *>();
// Iterate in order to find the table view either by checking the name, the parent etc....

Другим подходом может быть тот, который предлагает Саймон, создание подклассов и добавление функции общего доступа к членам, которых вы хотите сделать доступными из виджетов верхнего уровня.

person pnezis    schedule 18.04.2012
comment
Итак, если я правильно понимаю: glWidget-›findChildren даст мне список всех дочерних элементов glWidget? Я в замешательстве, потому что мне понадобятся дочерние элементы моего MainWindow(), если я хочу, чтобы среди них был указан glWidget. Но почему я уже знаю имя (glWidget)? Как я понимаю, ребенок не может видеть данные своего брата? Просто с помощью родителя с пользовательским конструктором? Большой n00b здесь ... - person pazduha; 18.04.2012
comment
У меня получилось так: QList‹MeshViewerWidget*› allmeshwidgets = parentWidget()-›findChildren‹MeshViewerWidget *›(); MyMesh &mesh = allmeshwidgets.first()-›mesh(); Спасибо за помощь! - person pazduha; 18.04.2012