Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 找出在QTableWidget中选择的列_C++_Qt_Qtablewidget - Fatal编程技术网

C++ 找出在QTableWidget中选择的列

C++ 找出在QTableWidget中选择的列,c++,qt,qtablewidget,C++,Qt,Qtablewidget,我有一个QTableWidget,其中SelectionMode设置为SingleSelection,而SelectionBehavior设置为SelectColumns。这意味着只能选择一列 但是我以后需要知道选择了哪一列,我可以使用的唯一函数是selectedIndex()或selectedItems(),这两个函数都返回整个列表,这是浪费的 有没有更有效的方法?您使用selectedItems()的方法是正确的。 由于QT不知道您已将小部件设置为单行/列选择,因此它提供了返回QList的函

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

但是我以后需要知道选择了哪一列,我可以使用的唯一函数是
selectedIndex()
selectedItems()
,这两个函数都返回整个列表,这是浪费的


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

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

尽管我建议在应用程序中使用信号
currentColumnChanged()

()

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


()

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


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

我想使用
currentColumnChanged()
将是最有效的。最准确地说,请记住,如果您的代码将列设置在某个位置,信号也会触发(仅afaik qts
reset()
不会触发该信号)
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();
}