找出QTableWidget中选择了哪一列

Find out which column is selected in a QTableWidget

本文关键字:一列 QTableWidget 选择 找出      更新时间:2023-10-16

我有一个QTableWidget, SelectionMode设置为SingleSelection, SelectionBehavior设置为SelectColumns。这意味着只能选择一个列

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

有没有更有效的方法?

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

在你的情况下,你可以使用.first()来处理这些

尽管我建议使用信号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)

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
}
connect(tableWidget->selectionModel()
        , SIGNAL(currentColumnChanged(QModelIndex,QModelIndex))
        , SLOT(onColumnChanged(QModelIndex)));
...
void Class::onColumnChanged(const QModelIndex &index)
{
    int col = index.column();
}

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

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

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