Russian Qt Forum
Ноябрь 26, 2024, 10:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Соединение одного сигнала с несколькими слотами  (Прочитано 3675 раз)
olefard
Гость
« : Октябрь 26, 2009, 07:12 »

Пытаюсь сделать открытие разных форм по нажатию на Lable`ы
Код:
myDialog2::myDialog2(QWidget *parent) :
    QDialog(parent),
    m_ui(new Ui::myDialog2)
{

    myDialog* r = new myDialog;
    Form* f = new Form;
    m_ui->setupUi(this);
    connect(this, SIGNAL(clicked()), SLOT(btnClicked()));

    m_ui->label->installEventFilter(this);
    connect(this, SIGNAL(clicked()),SLOT(btnClicked_2()));
     m_ui->label_2->installEventFilter(this);

}

bool myDialog2::eventFilter(QObject *obj, QEvent *ev)
{
    switch(ev->type())
    {
        case QEvent::MouseButtonRelease:
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(ev);
            if (mouseEvent->button() == Qt::LeftButton)
            {
                emit clicked();
                return true;
            }
            break;
        }
        default:;
    }
    return QObject::eventFilter(obj, ev);
}

void myDialog2::btnClicked()
{
    myDialog r;
    r.exec();

}
void myDialog2::btnClicked_2()
{
    Form r1;
    r1.show();

}
При нажатии на разные лейблы открывается одно и тоже окно!!! Подскажите, что не так
Записан
BaltikS
Гость
« Ответ #1 : Октябрь 26, 2009, 10:08 »

Так попробуй...
Код:
bool myDialog2::eventFilter(QObject *obj, QEvent *ev)
{
    if (obj == m_ui->label && ev->type == QEvent::MouseButtonPress)
    {
          btnClicked();
          return TRUE;
    }
    if (obj == m_ui->label_2 && ev->type == QEvent::MouseButtonPress)
    {
          btnClicked_2();
          return TRUE;
    }
    return QObject::eventFilter(obj, ev);
}
И убери коннекты из конструктора
Записан
fuCtor
Гость
« Ответ #2 : Октябрь 26, 2009, 20:13 »

Лучше использовать QSignalMapper и связать с каждой кнопкой через метод map указатель на нужную форму или некоторый индекс. Подробнее в справки.
Записан
BaltikS
Гость
« Ответ #3 : Октябрь 27, 2009, 06:57 »

fuCtor, ты вопрос читал? QSignalMapper в данном случае вообще не нужен!
Записан
fuCtor
Гость
« Ответ #4 : Октябрь 27, 2009, 17:46 »

Читал, вполне как вариант можно использовать, на евент фильтрах свет клином не сошелся.
Записан
BaltikS
Гость
« Ответ #5 : Октябрь 27, 2009, 17:49 »

А теперь подумай, зачем испускать сигнал и потом его мапить и коннектить? Если данный класс испульзуется только в качестве главной формы...
Записан
fuCtor
Гость
« Ответ #6 : Октябрь 27, 2009, 17:52 »

Тоже верно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.088 секунд. Запросов: 20.