2013-04-23 24 views
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 ::連接:沒有這樣的插槽的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

看到我的編輯請。 – 2013-04-23 19:44:11

+0

如果setclick1沒有連接到信號,它將不會觸發: connect(signalmapper,SIGNAL(mapped(int)),this,SLOT(setclick1(int))); 和其他插槽 – andrjas 2013-04-23 19:47:22

+0

相同,請查看文檔:http://qt-project.org/doc/qt-4.8/qsignalmapper.html 您可能還需要將button.clicked信號與signalmapper連接起來。 map():connect(ui-> pushButton,SIGNAL(clicked()),signalmapper,SLOT(map())); – andrjas 2013-04-23 19:51:39