3

SelectionModeに設定されたQTableWidgetがありSingleSelection、にSelectionBehavior設定されていSelectColumnsます。つまり、選択できる列は 1 つだけです。

しかし、後でどの列が選択されているかを調べる必要があり、使用できる関数はselectedIndexes()orだけselectedItems()で、どちらもリスト全体を返すため、無駄です。

これをより効率的に行う方法はありますか?

4

5 に答える 5

3

selectedItems() を使用したアプローチは正しかったです。ウィジェットを単一行/列選択に設定したことを QT が認識できないため、QList<>.

あなたの場合、を使用してそれらに取り組むことができます.first()

アプリケーションでシグナルを使用し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 )

于 2013-03-22T08:28:21.240 に答える
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
}
于 2013-03-22T08:31:06.210 に答える
1
connect(tableWidget->selectionModel()
        , SIGNAL(currentColumnChanged(QModelIndex,QModelIndex))
        , SLOT(onColumnChanged(QModelIndex)));

...

void Class::onColumnChanged(const QModelIndex &index)
{
    int col = index.column();
}
于 2013-03-22T11:09:39.343 に答える
0

関数selectedRanges()が私が必要とすることをしているようです。選択された範囲のリストを返しますが、これは 1 つの列であるため、このリストには 1 つの項目しかありません (効率的であり、大きなリストを作成する必要はありません)。

int column = ui->tableWidget->selectedRanges().front().leftColumn();
于 2013-03-22T08:42:03.683 に答える