0

我想将三个按钮的插槽分配给一个信号。

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: No such slot MainWindow::clickmee(int) in ..\Qsignal2\mainwindow.cpp:11 QObject::connect: (receiver name: 'MainWindow')

如何将插槽分配给信号?如何将参数发送到插槽?

编辑:我想这样做:

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

但这个功能没有触发。我怎样才能做到这一点?

4

1 回答 1

0

你应该试试

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

我不确定这在 Qt4 或 Qt5 中是否仍然允许,但它在 Qt3 中有效。它只是将信号 signalmapper.mapped(x) 重新发送到 this.clickmee(x)

如果这不起作用,您可能应该编写一个真正的插槽,将其连接到 signalmapper.mapped 并在那里发出 clickmee。像这样的东西:

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

在构造函数中:

connect(signalmapper, SIGNAL(mapped(int)),this, SLOT(clickmee_slot(int)));
于 2013-04-23T19:30:22.740 回答