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

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

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
{
// ...
}
}

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

0

Решение

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

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

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

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

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

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

connect(signalmapper, SIGNAL(mapped(int)),this, SLOT(clickmee_slot(int)));
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]