SelectionMode
に設定されたQTableWidgetがありSingleSelection
、にSelectionBehavior
設定されていSelectColumns
ます。つまり、選択できる列は 1 つだけです。
しかし、後でどの列が選択されているかを調べる必要があり、使用できる関数はselectedIndexes()
orだけselectedItems()
で、どちらもリスト全体を返すため、無駄です。
これをより効率的に行う方法はありますか?
SelectionMode
に設定されたQTableWidgetがありSingleSelection
、にSelectionBehavior
設定されていSelectColumns
ます。つまり、選択できる列は 1 つだけです。
しかし、後でどの列が選択されているかを調べる必要があり、使用できる関数はselectedIndexes()
orだけselectedItems()
で、どちらもリスト全体を返すため、無駄です。
これをより効率的に行う方法はありますか?
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 )
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
}
connect(tableWidget->selectionModel()
, SIGNAL(currentColumnChanged(QModelIndex,QModelIndex))
, SLOT(onColumnChanged(QModelIndex)));
...
void Class::onColumnChanged(const QModelIndex &index)
{
int col = index.column();
}
関数selectedRanges()が私が必要とすることをしているようです。選択された範囲のリストを返しますが、これは 1 つの列であるため、このリストには 1 つの項目しかありません (効率的であり、大きなリストを作成する必要はありません)。
int column = ui->tableWidget->selectedRanges().front().leftColumn();