2012-01-01 19 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); 

     } 
} 

Tengo unos QPushButtons que se añaden de forma automática. ¿Hay alguna forma de agregar el "atributo id o algo más" al botón y luego saber en qué botón se hizo clic? Tengo una acción diferente para cada botón.Qt, PushButton, id attribute? Cualquier forma de saber en qué botón se hizo clic

Respuesta

5

QApplication ofrece sender() que contiene qué objeto envió la señal. Por lo que puede hacer:

//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 es bastante bueno para este tipo de cosas.

Se podría definir su ranura como este por ejemplo:

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

A continuación, agregue un miembro QSignalMapper* a su clase y conectarlo a la ranura:

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

En el addRadioToUI, después de crear su botón, hacer:

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

Si todo lo que necesita es un puntero al objeto que activó la señal, puede usar la función estática QOjbect::sender en su ranura para obtener un control de eso.

+0

Después de crear 'signalMapper', necesita recibir todas las señales que desea que envíen. Necesitarás una llamada como 'connect (ui-> pushButton_1, SIGNAL (clicked()), signalMapper, SLOT (map()));' justo después de que 'signalMapper' se cree y debería repetirse para todos los objetos que quieras es para recibir – zar

2

Utilice QButtonGroup. Toma ID como parámetro cuando se agrega un botón y proporciona el id a una ranura cuando se presiona un botón en el grupo.

Cuestiones relacionadas