2012-01-01 45 views
6
void MainWindow::addRadioToUI() 
{  int button_cunter=4; 
     while(!database.isEmpty()) 
     {  button_cunter++; 

       QPushButton *one = new QPushButton("Play: "+name(get_r.getTrackId())); 
       one->setIcon(QIcon(":/images/play_button.png")); 
       one->setMaximumWidth(140); 
       one->setFlat(true); 

       QGroupBox* get_rGB = new QGroupBox("somethink"); 
       QFormLayout* layout = new QFormLayout; 
       if(button_cunter%5 == 0){ 
        layout->addWidget(one); 

       } 

       get_rGB->setLayout(layout); 
       scrollAreaWidgetContents->layout()->addWidget(get_rGB); 

     } 
} 

我有幾個QPushButtons自動添加。 有沒有辦法添加「id屬性或其他」按鈕,然後知道哪個按鈕被點擊?每個按鈕我都有不同的操作。Qt,PushButton,id屬性?任何方式知道哪個按鈕被點擊

回答

5

QApplication優惠sender()其中包含哪個對象發送信號。所以,你可以這樣做:

//slot, this could also be done in a switch 
if(button[X] == QApplication::sender()){ 
    doX(); 
}else if(button[Y] == QApplication::sender()){ 
    doY(); 
} 

http://doc.qt.io/qt-4.8/qobject.html#sender

5

QSignalMapper是這種類型的東西很不錯。

你會定義插槽這樣的,例如:

public slots: 
    void clicked(int buttonId); // or maybe trackId 

然後,QSignalMapper*成員添加到您的類,並將其連接到該插槽:

signalMapper = new QSignalMapper(this); 
    connect(signalMapper, SIGNAL(mapped(int)), 
      this,   SLOT(clicked(int))); 

addRadioToUI,創建後您按鈕,做:

signalMapper.setMapping(one, button_cunter); 
          // or trackId if that's more practical 

如果你只需要是一個指向觸發信號的對象的指針,您可以使用槽中的靜態函數QOjbect::sender來獲取該函數的句柄。

+0

'signalMapper'創建後,您需要它來接收所有您希望匯出的信號。你將需要一個像'connect(ui-> pushButton_1,SIGNAL(clicked()),signalMapper,SLOT(map()));'緊接在'signalMapper'創建之後,並且應該爲所有你想要的對象重複它接受。 – zar 2014-10-29 16:01:55

2

使用QButtonGroup。當按鈕被添加時,它將id作爲參數,並且當組中的按鈕被按下時將id提供給插槽。

相關問題