C++ 当被点击时,如何获取放置在Qtablewidget单元格中的widget的行号?

C++ 当被点击时,如何获取放置在Qtablewidget单元格中的widget的行号?,c++,qt,qt4,qt4.8,C++,Qt,Qt4,Qt4.8,我尝试的是在用户选择项目时获取QcomboBox的行号。虽然使用 cellClicked(int,int) 信号,但它仅在单元格上没有小部件时工作 那么,如果单元格中放置了一个小部件,那么如何获取行号呢 注意:所有组合框都是动态添加的最后我找到了两种方法 通过设置QComboBox的属性 使用QSignalMapper 第一种方法 QComboBox* mCombo = new QCombobox(); mComboBox->setProperty("row",(int) i); //

我尝试的是在用户选择项目时获取QcomboBox的行号。虽然使用

cellClicked(int,int)
信号,但它仅在单元格上没有小部件时工作

那么,如果单元格中放置了一个小部件,那么如何获取行号呢


注意:所有组合框都是动态添加的

最后我找到了两种方法

  • 通过设置QComboBox的属性
  • 使用QSignalMapper
  • 第一种方法

    QComboBox* mCombo = new QCombobox();
    mComboBox->setProperty("row",(int) i); // i represents the row number in qtablewidget
    
    在处理函数中,处理单击的QComboBox

    int row = sender()->property("row").toInt();
    
    第二种方法

    QSignalMapper *signalMapper= new QSignalMapper(this);   //Create a signal mapper instance 
    
    for (each row in table) {
         QComboBox* mCombo = new QComboBox();
         table->setCellWidget(row,col,combo);                          
         connect(mCombo, SIGNAL(currentIndexChanged(int)), signalMapper, SLOT(map()));  
    
    /*connect each signal of QComboBox to signal Mapper slot (i.e map()) which in turns connected to the signal of signalMapper calling the SLOT associated with it (i.e rowFinder) */         
    
    signalMapper->setMapping(combo, (int)row);  //assign mapping to each widgetusing set mapping
    
    
    }
    
    connect(signalMapper, SIGNAL(mapped(int)),
             this, SLOT(rowFinder(int)));
    
    功能:行查找器(int rowIndex)


    正确的方法是使用QStyledItemDelegate子类绘制组合框并将其创建为编辑器。一旦实现,您就可以使用来自
    表->选择模型()
    选择更改
    当前更改
    )的信号截取您想要的任何内容(但是,我再次99.9999%确定您尝试在代理内部执行的操作已经可以完成)
    int row = rowIndex; //here is the row indexof selected QComboBox