我有一个QTableWidget,SelectionMode
设置为SingleSelection
,SelectionBehavior
设置为SelectColumns
。这意味着可以选择仅一列。
但我后来需要找出哪个列被选中,我可以使用的唯一功能是selectedIndexes()
或selectedItems()
,这两个功能都返回整个列表,这是浪费的
有没有办法更有效地做到这一点?
答案 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。