2017-01-23 16 views
0

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()を呼び出すと、ビューに表示されていないモデルに格納されているセルの内容にアクセスします(垂直方向のセクション移動によって順序が変更されます)。

このようにセルの内容をどのように読み取ることができますか?

答えて

1

正しく理解していれば、ヘッダーを移動して列の順序を変更し、ビューの外観を知りたいことがあります。 モデルの変更を引き起こさないヘッダーを並べ替えると(90%は確実です)私は信じています!モデルのデータの印刷を開始したばかりの場合は、ヘッダーを使用して列をスワッパ/並べ替え直す前に、最初のデータの順序でしかデータが表示されません。

しかし、ヘッダーの順序を維持しながら独自の小さなデータ構造を維持することができます。ヘッダーの順序を変更するときは、その時点でスロットcolumnMoved()が呼び出され、columnViewportPositionの方法を利用してすべての位置列の順序を格納する小さなデータ構造を更新します。

したがって、データを印刷する際には、ヘッダーは自分のデータ構造のように順序が正しいとみなす必要があります。

希望はあなたが探しているものをやり遂げます!

+0

ありがとうございました。しかし、私はまた、最も簡単な方法かもしれないと思った! – Mosi

+1

また、独自の構造を維持するのではなく、columnMapでcolumnViewportPositionで計算した新しい順序に基づいて、モデルの実際のスワップを実行することもできます。 しかし、それはあなたが興味を持っていないかもしれないモデルの更新を引き起こし、この種のスワップを実行している間にQSignalBlockerでそれらをブロックすべきです! あなたが1つを見つけることができれば簡単な方法を投稿してください;) 乾杯! – PRIME

関連する問題