0

I'm sorry, I know the question has already been asked before, however, I really can't have a solution for me.

My situation is very basic : I have a tableview and in each row I have some QPushButtons. The difficulty for me is to know which button has been clicked.

I've read about Mappers, ... but it doesn't work. Eclipse is not happy, exeception, ...

signalMapper = QSignalMapper()            
for row,dossier in enumerate(Dossier.listeDossiers):
  button = QPushButton("Archive")
  signalMapper.setMapping(button, row)
  QObject.connect(button, SIGNAL("clicked()"), signalMapper, SLOT("map()"))
  self.dlg.ui.tableWidget_dossiers.setCellWidget(row, 5, button)

def getArchive(self,row):
   print "Row " + str(row)

I know this is wrong or some lines are missing, but I tried a lot of solutions. Thanks Regards Etienne

etrimaille
  • 230
  • 1
  • 4
  • 13
  • do you wanna get to know in slot which button is clicked? – Tab Nov 13 '13 at 06:28
  • 1
    What's the error? Your code looks correct except that you probably want to connect to one of the signal mapper's `mapped()` signals to receive clicks. – Frank Osterfeld Nov 13 '13 at 06:55

1 Answers1

1

Use a QButtonGroup:

    self.buttonGroup = QtGui.QButtonGroup(self)
    self.buttonGroup.buttonClicked[int].connect(self.getArchive)
    for row, dossier in enumerate(Dossier.listeDossiers):
        button = QPushButton("Archive")
        self.buttonGroup.addButton(button, row)
        self.dlg.ui.tableWidget_dossiers.setCellWidget(row, 5, button)

def getArchive(self, row):
    print "Row " + str(row)
ekhumoro
  • 115,249
  • 20
  • 229
  • 336