Узнайте, какой столбец выбран в 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
}

currentColumn() возвращает int текущего выбранного столбца.

Другие вопросы по тегам