2

データのマトリックスがあり、QStringList の QList として格納しただけで、すべて同じ数の QString が含まれています。このように、データはほとんどスプレッドシートのように見えます。

QTableView を使用して、このデータをユーザーに表示します。

void DialogwitQTableView::setData(QList<QStringList> s)
{
    /* Create the data model */
    // 1. give it some headers
    QStandardItemModel model = new QStandardItemModel(s.count(),25,this); //x Rows and 25 Columns
    model->setHorizontalHeaderItem(0, new QStandardItem(QString("Column 1")));
    model->setHorizontalHeaderItem(1, new QStandardItem(QString("Column 2")));
     // ...
    model->setHorizontalHeaderItem(24, new QStandardItem(QString("Column 25")));

    // 2. populate the model with the data

    for(int i = 0; i < s.count() ; i++)
    {
        for(int j = 0; j < s[i].count() ; j++)
            model->setItem(i,j,new QStandardItem(QString(s[i][j])));
    }
    ui->NameOfTheTableView->setModel(model);
}

ここで、ユーザーがデータの一部を変更したい場合は、ダイアログボックスの QTableView をダブルクリックして、必要なものを編集します。

その編集をデータでも取得するにはどうすればよいですか? その新しい情報で QStringList をどのように適応させることができますか?

ドキュメントを検索すると、ほとんどの場合、データベースにリンクされた QTableView が見つかりますが、これがメモリ内の単純なデータ構造でどのように機能するかわかりません。QtDesigner に移動して、TableView の [スロットに移動] をクリックしても、「datachanged」などのスロットが表示されません。

何かご意見は?私はかなり行き詰まりを感じており、おそらく何かを概説していると思われます。どんなヒントでも大歓迎です。

4

3 に答える 3

2

ドコを見ると、QTableViewはQAbstractItemViewから6つのシグナルを継承しています

http://doc.qt.digia.com/qt/qabstractitemview.html#signals

このクラスには、編集をキャプチャし、トリガーを編集するためのあらゆる種類の機能があります。

データが変更されたときにキャッチできたら、MVCビューを使用している場合は、データをモデルに再コミットできます。例はたくさんあると思います。

お役に立てば幸いです。

于 2012-12-16T01:21:18.423 に答える
1

ドキュメントを検索すると、ほとんどの場合、データベースにリンクされた QTableView が見つかりますが、これがメモリ内の単純なデータ構造でどのように機能するかわかりません。

QTableViewQt のモデル/ビュー フレームワークの一部です。モデルビューの例がたくさんあります。

その編集をデータでも取得するにはどうすればよいですか? その新しい情報で QStringList をどのように適応させることができますか?

少なくとも次の解決策が存在します。

  1. メソッドQStandardItemModel経由ですべてのデータを取得できます。item

  2. 信号に接続しQStandardItemModel::itemChangedます。

  3. サブクラス化によって独自のモデルを作成し ( に基づくことをお勧めしますQAbstractTableModel)、いくつかのメソッド ( datasetData+ いくつかのユーティリティ メソッド) を実装できます。

于 2012-12-16T01:31:43.197 に答える