为一个信号分配三个插槽

时间:2013-04-23 19:08:43

标签: c++ window signals qt5 slots

我想为信号分配三个按钮的插槽。

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:.. \ Qsignal2 \ mainwindow.cpp中没有这样的插槽MainWindow :: clickmee(int):11   QObject :: connect :(接收者名称:'MainWindow')

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

编辑: 我想这样做:

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

但此功能未触发。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

你应该试试

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

我不确定在Qt​​4或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)));