Как отделить функциональность вкладок от класса главного окна Qt

В моем приложении у меня есть QTabWidget с 3 страницами с разработанными в нем элементами управления с использованием Qt Creator 2.4.1. теперь я хочу отделить функциональность этих страниц от MainWindow, создав новые классы.

Мой вопрос: как получить доступ к экземпляру MainWindow::ui в моем новом классе? который объявляется в частном порядке.

это настольное приложение qt, а платформа - qt 4.8.1/win 7.


person Prady    schedule 23.07.2012    source источник
comment
Если вам нужно получить доступ к MainWindow::ui из вкладок, вы на самом деле не разделили функциональность. Это говорит о том, что переосмысление дизайна может быть хорошей идеей.   -  person tmpearce    schedule 24.07.2012
comment
Да, я не разделил функциональность, какие-либо предложения по дизайну для достижения этого?   -  person Prady    schedule 24.07.2012
comment
Детали того, как это сделать, выходят далеко за рамки этого типа форума - и, не зная об этом намного больше, никто не сможет рассказать вам, как это сделать. Начните с вопроса: зачем вкладке знать об основном пользовательском интерфейсе? Затем вы можете либо переместить то, что нужно знать, на саму вкладку, либо передать информацию через функцию (или signal/slot соединение).   -  person tmpearce    schedule 24.07.2012


Ответы (1)


Вы не можете напрямую получить доступ к пользовательскому интерфейсу MainWindow на своих вкладках. Поскольку ваш QTabWidget является дочерним элементом MainWindow (именно так он должен быть реализован и предполагает, что вы это сделали).

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

ИЛИ

Вы можете написать метод в MainWindow, который будет работать с его пользовательским интерфейсом. И вызовите его из виджета вкладки,

this->parent->parent->uiMethod();

// this(Tab) -> parent(QTabWidget) -> parent(MainWindow) -> [related method]
person Anwar Shaikh    schedule 23.07.2012
comment
Я уже использую сигналы и слоты для многих элементов управления на вкладках, поскольку на этих трех вкладках присутствует много элементов управления, мой MainWindow.cpp довольно большой с кодом, реализованным для всех элементов управления. так что я хочу разделить функциональность для каждой вкладки. Я не уверен, что второе решение, которое вы дали, решит мою проблему. или мне чего-то не хватает, чтобы понять ваше решение? - person Prady; 23.07.2012
comment
Если у вас есть элементы управления на отдельных вкладках, разве вы не можете обрабатывать их на самих вкладках?? Старайтесь меньше зависеть от MainWindow по сигналам и слотам. - person Anwar Shaikh; 25.07.2012
comment
Хорошо, у меня был один файл пользовательского интерфейса со всеми элементами управления, теперь я разделил функциональность на отдельные классы, и теперь его легко поддерживать с помощью сигналов и слотов. Спасибо. - person Prady; 27.07.2012