找出QTableWidget中选择的列

时间:2013-03-22 08:19:06

标签: c++ qt qtablewidget

我有一个QTableWidget,SelectionMode设置为SingleSelectionSelectionBehavior设置为SelectColumns。这意味着可以选择仅一列

但我后来需要找出哪个列被选中,我可以使用的唯一功能是selectedIndexes()selectedItems(),这两个功能都返回整个列表,这是浪费的

有没有办法更有效地做到这一点?

5 个答案:

答案 0 :(得分:3)

您使用selectedItems()的方法是正确的。 由于QT无法知道您已将小部件设置为单选/列选择,因此它提供了返回QList<>的函数。

在您的情况下,您可以使用.first()来处理这些问题。

Evne虽然我建议使用信号currentColumnChanged()在您的应用程序中做出反应

http://harmattan-dev.nokia.com/docs/library/html/qt4/qitemselectionmodel.html#currentColumnChanged

您可以始终通过selectionModel()->isColumnSelected()

遍历所选行的所有列

http://qt-project.org/doc/qt-4.8/qitemselectionmodel.html#isColumnSelected

答案 1 :(得分:1)

connect(tableWidget, SIGNAL(currentCellChanged(int,int,int,int), this, SLOT(onCellChanged(int,int,int,int)));

void Class::onCellChanged(int curRow, int curCol, int preRow, int preCol)
{
    current_Col = curCol;
    // curRow, preRow and preCol are unused
}

答案 2 :(得分:0)

似乎函数selectedRanges()完成了我的需要。它返回所选范围的列表,但由于它是单个列,因此该列表只有一个项目(因此效率很高,不需要创建大型列表)。

int column = ui->tableWidget->selectedRanges().front().leftColumn();

答案 3 :(得分:0)

connect(tableWidget->selectionModel()
        , SIGNAL(currentColumnChanged(QModelIndex,QModelIndex))
        , SLOT(onColumnChanged(QModelIndex)));

...

void Class::onColumnChanged(const QModelIndex &index)
{
    int col = index.column();
}

答案 4 :(得分:0)

currentColumn()返回当前所选列的int。