C++ 找出在QTableWidget中选择的列
我有一个QTableWidget,其中C++ 找出在QTableWidget中选择的列,c++,qt,qtablewidget,C++,Qt,Qtablewidget,我有一个QTableWidget,其中SelectionMode设置为SingleSelection,而SelectionBehavior设置为SelectColumns。这意味着只能选择一列 但是我以后需要知道选择了哪一列,我可以使用的唯一函数是selectedIndex()或selectedItems(),这两个函数都返回整个列表,这是浪费的 有没有更有效的方法?您使用selectedItems()的方法是正确的。 由于QT不知道您已将小部件设置为单行/列选择,因此它提供了返回QList的函
SelectionMode
设置为SingleSelection
,而SelectionBehavior
设置为SelectColumns
。这意味着只能选择一列
但是我以后需要知道选择了哪一列,我可以使用的唯一函数是selectedIndex()
或selectedItems()
,这两个函数都返回整个列表,这是浪费的
有没有更有效的方法?您使用selectedItems()的方法是正确的。 由于QT不知道您已将小部件设置为单行/列选择,因此它提供了返回
QList
的函数
在您的情况下,您可以使用.first()
处理这些问题
尽管我建议在应用程序中使用信号currentColumnChanged()
()
您可以始终通过selectionModel()->isColumnSelected()
()该函数似乎满足了我的需要。它返回一个选定范围的列表,但由于它是一个单列,所以该列表只有一个项目(所以它很有效,不需要创建大的列表)
currentColumn()返回当前所选列的int。我想使用
currentColumnChanged()
将是最有效的。最准确地说,请记住,如果您的代码将列设置在某个位置,信号也会触发(仅afaik qtsreset()
不会触发该信号)
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
}
int column = ui->tableWidget->selectedRanges().front().leftColumn();
connect(tableWidget->selectionModel()
, SIGNAL(currentColumnChanged(QModelIndex,QModelIndex))
, SLOT(onColumnChanged(QModelIndex)));
...
void Class::onColumnChanged(const QModelIndex &index)
{
int col = index.column();
}