QTableViewには任意のデータが格納されています。ユーザーは、verticalHeaderを移動可能にすることによって、表の行を並べ替えることができます。ここではサンプルコードは次のとおりです。QTableViewの行の内容が格納されていないと表示されているのと同じ順序で読み取る
#include <QApplication>
#include <QTableWidget>
#include <QDebug>
#include <QVBoxLayout>
#include <QPushButton>
#include <QHeaderView>
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
QWidget base;
QTableWidget* tablWid = new QTableWidget(&base);
tablWid->verticalHeader()->setSectionsMovable(true);
tablWid->verticalHeader()->setDragEnabled(true);
//////////////////////////////////////////////////////////////////////////
// Fill the model with some data
tablWid->model()->insertColumn(0);
tablWid->model()->insertRows(0,10);
for (int i = 0; i < 10; ++i)
tablWid->model()->setData(tablWid->model()->index(i, 0), "Item " + QString::number(i));
//////////////////////////////////////////////////////////////////////////
QPushButton* dumpButton = new QPushButton("Dump Model", &base);
QObject::connect(dumpButton, &QPushButton::clicked, [tablWid]()->void {
for (int j = 0; j < tablWid->model()->rowCount();++j){
qDebug() << tablWid->model()->index(j, 0).data().toString();
}
});
QVBoxLayout* baseLay = new QVBoxLayout(&base);
baseLay->addWidget(tablWid);
baseLay->addWidget(dumpButton);
base.show();
return a.exec();
}
我々はQTableView(モデルに格納されていないビューで見られるような)に見られるのと同じ順序でセルの内容を読みたいです。現在、model-> data()を呼び出すと、ビューに表示されていないモデルに格納されているセルの内容にアクセスします(垂直方向のセクション移動によって順序が変更されます)。
このようにセルの内容をどのように読み取ることができますか?
ありがとうございました。しかし、私はまた、最も簡単な方法かもしれないと思った! – Mosi
また、独自の構造を維持するのではなく、columnMapでcolumnViewportPositionで計算した新しい順序に基づいて、モデルの実際のスワップを実行することもできます。 しかし、それはあなたが興味を持っていないかもしれないモデルの更新を引き起こし、この種のスワップを実行している間にQSignalBlockerでそれらをブロックすべきです! あなたが1つを見つけることができれば簡単な方法を投稿してください;) 乾杯! – PRIME