2012-05-30 3 views
0

С помощью QtCreator, созданного по умолчанию при создании виджета, класс для него создает форму как закрытую для класса. Так что у вас есть, например, что-то вроде этого:Подключение к сигналам частных виджетов

Теперь то, что я хочу знать, как вы связаны с сигналами в пределах ui. Например, если этот виджет был встроен в QStackedWidget, и когда нажата кнопка, отображаемая страница должна измениться. Я бы подумал о подключении к кнопке, но ui является закрытым, поэтому я не могу.

Должен ли я создавать сигналы в MainWindow, а затем внутри, которые соединяют сигналы «ui» с ними и, таким образом, пузыряют иерархию? Или я пропустил что-то простое?

ответ

3

Вы не можете подключить несвязанный объект к сигналам/слотам агрегатных компонентов, даже если бы вы могли сломать инкапсуляцию и стать кошмаром для обслуживания.

Вам необходимо разоблачить сигналы/слоты агрегатных компонентов, добавив их в API MainWindow, а затем вызывать относительный метод ui в определении.

Например, в MainWindow определения, добавьте:

signals: 
    void buttonClicked(); 

А потом в конструкторе, сделайте следующее:

connect(ui->button, SIGNAL(clicked()), this, SIGNAL(buttonClicked())); 

Таким образом, ваш MainWindow класс распространяется сигналы от его агрегатов - но отладили к точно, как вы собираетесь использовать класс.

+0

Спасибо за ответ. Я понял, что это будет кошмар для поддержания, поэтому я пытаюсь понять это правильно, поэтому я буду изучать лучшие процессы :-) Итак, если я правильно понял, что вы имеете в виду, так это то, что в моем агрегатном компоненте я нужно было бы создавать сигналы, которые представляют, например, щелчок кнопки, а затем мой «MainWindow» будет подключаться к этому сигналу, а затем в компоненте aggreagate - это всего лишь случай соединения сигналов вместе? – Firedragon

+0

@Firedragon Я добавил свой ответ, чтобы добавить пример. Для слотов добавьте свой слот в заголовок, а затем в его определении вызовите агрегатный компонент напрямую (вы не можете объединить слоты вместе в вызове 'connect()'). – cmannett85

+0

спасибо. Теперь мне намного понятнее – Firedragon

Смежные вопросы