2010-02-24 3 views
2

Привет, у меня есть запасной момент, поэтому я решил посмотреть Qt и как легко я могу переносить свои приложения Windows на Qt.Как обрабатывать сигналы, когда объект Qt не создается через Designer?

Моя единственная реальная проблема - это пара элементов управления, которые потребуют повторной реализации под Qt. Я уже обработал основной чертеж элемента управления, но мой элемент управления создает дочернюю полосу прокрутки. Проблема в том, что эта полоса прокрутки создается динамически как часть моего нового виджета (то есть m_Scrollbar является членом виджета). Как я могу ответить на движение полосы прокрутки. В других обстоятельствах это легко, так как я просто создал функцию on_myscrollbar_sliderMoved под моим protected slots и обрабатываю ее там. Однако это зависит от QScrollBar, который называется myscrollbar. Как я создал объект динамически (т. Е. Не через конструктор), как я могу захватить этот сигнал?

Я предполагаю, что это очень просто, и я пропускаю очевидное :)

+3

Думаю, вам нужно больше времени проводить в документах Qt. – erelender

+0

Наверное, правда ... но учитывая, что я впервые получил Qt около часа назад, я считаю, что я не делаю «слишком» плохо: DI нравится, хотя ... его довольно легко :) – Goz

ответ

5
connect(myScrollbar, SIGNAL(<signal signature>), this, SLOT(<slot signature>)); 

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

Я предположил, что myScrollbar имеет тип QScrollBar * и что слот определяется как член в вашем классе.

Когда myScrollbar уничтожен, соединение удаляется (вызывается связь).

См. Документацию по методам QObject :: connect и QObject :: disconnect.

Позже редактировать - быть более конкретным, в вашем коде может быть:

myScrollbar = new QScrollBar; // Create the scroll bar 
// ... add it to the layout, etc. 
// ... and connect the signal to your slot 
connect(myScrollbar, SIGNAL(sliderMoved(int)), this, SLOT(handleSliderMoved(int))); 

где handleSliderMoved является метод слот вашего класса.

+0

Sweet ... I знал, что это будет просто! Приветствия :) – Goz