Читаю хелп Qt'шный и чего-то никак не пойму по сабжу.... может потому-что ночь на дворе. Пользую QDevelop.
Нужно просто в Слоте класса определить, что за кнопка ему посигналила, ибо их много на форме...
Укажите пожалуйста вектор на раскопки уважаемые форумчане ;-)
Начал изучать Qt4, возник вопрос про Сигналы и Слоты (как определить в сслоте, какая кнопка засигналила clicked())
Модератор: Модераторы разделов
-
0xFF
- Сообщения: 267
- ОС: Gentoo
-
Clear_Mind
- Сообщения: 241
- Статус: Изредко заглядывающий
- ОС: openSuSE 11.1
Re: Начал изучать Qt4, возник вопрос про Сигналы и Слоты
схема такая:
объект генерирующий сигнал -- однозначно определяет "что за кнопка ему посигналила"
Код: Выделить всё
connect(<объект генерирующий сигнал (!)>, SIGNAL(<собственно сигнал>), <объект "слушающий" данный сигнал>, SLOT(<функция обрабатывающая сигнал>));объект генерирующий сигнал -- однозначно определяет "что за кнопка ему посигналила"
Bombers launch with no recall + Minutes warning of the missile fall
Take a look at your last sky + Guessing you won't have the time to cry
--- Iron Maiden (Brouther Than A Thousand Suns, 2006)
Take a look at your last sky + Guessing you won't have the time to cry
--- Iron Maiden (Brouther Than A Thousand Suns, 2006)
-
GRS
- Сообщения: 236
- Статус: C++ Pro
- ОС: Suse10.2/XP
Re: Начал изучать Qt4, возник вопрос про Сигналы и Слоты
А зачем ты на все кнопки один сигнал вешаешь ? Повесь разные. Либо как вариант, унаследуй все кнопки от базового класса, в котором определи свой метод Type, который будет возвращать уникальный идентификатор, кастуй обьект в этот базовый класс, вызывай Type - и точно будешь знать что за кнопка.
В общем виде как-то так, но еще раз повторю проще на каждую кнопку - свой обработчик.
Код: Выделить всё
class ButtonBase
{
public:
ButtonBase(int nId) : m_nId(nId) {}
int Type() { return m_nId; }
private:
int m_nId;
};
enum
{
BUTTON1,
BUTTON2,
BUTTON3,
....
};
class MyButton : public QPushButton, public ButtonBase
{
MyButton(int nId, QWidget * pParent = 0) : ButtonBase(nId), QPushButton(pParent) {}
...
};
...
MyButton btn1(BUTTON1, this);
MyButton btn2(BUTTON2, this);
// где то в коде
connect(&btn1, SIGNAL(clicked()), &app, SLOT(ButtonClick()));
connect(&btn2, SIGNAL(clicked()), &app, SLOT(ButtonClick()));
// обработка
void ButtonClick()
{
ButtonBase * pButton = dynamic_cast<ButtonBase*>(sender());
if (!pButton)
return; // это не наша кнопка или вообще не кнопка
switch (pButton->Type())
{
case BUTTON1:
break; // нажали кнопку 1
case BUTTON2:
break; // нажали кнопку 2
}
}В общем виде как-то так, но еще раз повторю проще на каждую кнопку - свой обработчик.
Код: Выделить всё
connect(&btn1, SIGNAL(clicked()), &app, SLOT(Button1Click()));
connect(&btn2, SIGNAL(clicked()), &app, SLOT(Button2Click()));
void Button1Click() { // кликнули на кнопку btn1
void Button2Click() { // кликнули на кнопку btn2-
Olegator
- Сообщения: 2493
- ОС: SuseLinux 11.2 KDE 4.3
-
0xFF
- Сообщения: 267
- ОС: Gentoo
Re: Начал изучать Qt4, возник вопрос про Сигналы и Слоты
Всем спасибо :-) ... Точно ведь можно каждую кнопку забиндить на свой слот... вот что значит бессонница ))
Тему можно закрыть.
Тему можно закрыть.
-
un-defined
- Сообщения: 145
- ОС: Kubuntu, Gentoo
Re: Начал изучать Qt4, возник вопрос про Сигналы и Слоты
Можно кстати глянуть на функцию sender() ... Если не хочется плодить слоты, а все делать в одной функции, т.е. ответить напрямую на вопрос автора темы.
Хотя конечно лучше плодить слоты.
Хотя конечно лучше плодить слоты.
Don`t try - just do or do not ©Master Joda