3

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

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

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

4

5 回答 5

3

您使用 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

于 2013-03-22T08:28:21.240 回答
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
}
于 2013-03-22T08:31:06.210 回答
1
connect(tableWidget->selectionModel()
        , SIGNAL(currentColumnChanged(QModelIndex,QModelIndex))
        , SLOT(onColumnChanged(QModelIndex)));

...

void Class::onColumnChanged(const QModelIndex &index)
{
    int col = index.column();
}
于 2013-03-22T11:09:39.343 回答
0

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

int column = ui->tableWidget->selectedRanges().front().leftColumn();
于 2013-03-22T08:42:03.683 回答
0

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

于 2014-02-19T18:35:53.327 回答