Узнайте, какой столбец выбран в QTableWidget
У меня есть QTableWidget с SelectionMode
установлен в SingleSelection
, а также SelectionBehavior
установлен в SelectColumns
, Это означает, что может быть выбран только один столбец.
Но позже мне нужно выяснить, какой столбец выбран, и единственные функции, которые я могу использовать, это selectedIndexes()
или же selectedItems()
Оба возвращают целые списки, что расточительно.
Есть ли способ сделать это более эффективно?
5 ответов
Кажется, что функция selectedRanges() делает то, что мне нужно. Он возвращает список выбранных диапазонов, но, поскольку он представляет собой один столбец, в этом списке будет только один элемент (поэтому он эффективен, и не нужно создавать большой список).
int column = ui->tableWidget->selectedRanges().front().leftColumn();
Ваш подход с selectedItems() был правильным. Поскольку QT не может знать, что вы установили свой виджет на выбор одной строки / столбца, он предлагает эти функции для возврата QList<>
,
в вашем случае вы можете работать с ними с помощью .first()
,
Евне хоть и предлагаю использовать сигналы currentColumnChanged()
реагировать в вашем приложении
( http://harmattan-dev.nokia.com/docs/library/html/qt4/qitemselectionmodel.html)
вы всегда можете перебрать все столбцы выбранной строки с помощью selectionModel()->isColumnSelected()
( http://qt-project.org/doc/qt-4.8/qitemselectionmodel.html)
connect(tableWidget->selectionModel()
, SIGNAL(currentColumnChanged(QModelIndex,QModelIndex))
, SLOT(onColumnChanged(QModelIndex)));
...
void Class::onColumnChanged(const QModelIndex &index)
{
int col = index.column();
}
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
}