Назначить три слота одному сигналу

Я хочу назначить слот трех кнопок для сигнала.

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QSignalMapper *signalmapper;
    Ui::MainWindow *ui;
    void test(int);

signals:
    void clickmee(int);

public slots:
    void setclick1(int);
    void setclick2(int);
    void setclick3(int);
};

Я делаю это в конструкторе:

signalmapper = new QSignalMapper(this);
signalmapper->setMapping(ui->pushButton, 10);
signalmapper->setMapping(ui->pushButton1, 10);
signalmapper->setMapping(ui->pushButton1, 10);
connect(signalmapper, SIGNAL(mapped(int)),this,SLOT(clickmee(int)));

но когда я запускаю программу, она пишет:

QObject::connect: Нет такого слота MainWindow::clickmee(int) в ..\Qsignal2\mainwindow.cpp:11 QObject::connect: (имя получателя: 'MainWindow')

Как я могу назначить слоты для сигнала? Как я могу отправить параметр в слот?

РЕДАКТИРОВАТЬ: я хочу сделать это:

void  setclick1(int x)
{
    if(x== 10)
    {
        // ....
    }
    else
    {
        // ...
    }
}

но эта функция не срабатывает. Как я могу это сделать?


person Mahdi_Nine    schedule 23.04.2013    source источник


Ответы (1)


тебе стоит попробовать

connect(signalmapper, SIGNAL(mapped(int)),this, SIGNAL(clickmee(int)));

Я не уверен, разрешено ли это в Qt4 или Qt5, но это было допустимо в Qt3. Он просто повторно отправляет сигнал signalmapper.mapped(x) в this.clickmee(x)

Если это не сработает, вам, вероятно, следует написать настоящий слот, подключить его к signalamper.mapped и генерировать кликми там. Что-то вроде этого:

public slots:
 void clickmee_slot(int x) {
  emit clickmee(x);
 }

и в конструкторе:

connect(signalmapper, SIGNAL(mapped(int)),this, SLOT(clickmee_slot(int)));
person andrjas    schedule 23.04.2013
comment
если setclick1 не подключен к сигналу, он не сработает: connect(signalmapper, SIGNAL(mapped(int)),this,SLOT(setclick1(int))); и то же самое для других слотов - person andrjas; 23.04.2013
comment
и ознакомьтесь с документацией: qt-project.org/doc/qt-4.8/ qsignalmapper.html вам, возможно, также потребуется соединить сигнал button.clicked с signalmapper.map(): connect(ui-›pushButton,SIGNAL(clicked()), signalmapper, SLOT(map())); - person andrjas; 23.04.2013