Как обрабатывать сигналы, когда объект Qt не создается через Designer? - PullRequest
2 голосов
/ 24 февраля 2010

Привет, у меня есть свободное время, поэтому я решил посмотреть на Qt и как легко я могу портировать свои приложения для Windows на Qt.

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

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

1 Ответ

5 голосов
/ 24 февраля 2010
connect( myScrollbar, SIGNAL( <signal signature>), this, SLOT( <slot signature>));

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

Я предположил, что 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 - метод слота вашего класса.

...