33

どのように聞いてよいかわかりませんので、お気軽にお尋ねください。

tableView->resizeColumnsToContents()現在のビューのデータに基づいてすべての列のサイズを変更するだけのようです。つまり、下にさらにデータがある場合 (単語数の点でより長い)、それらの単語は折り返されます (wordWrapプロパティが true に設定されている場合)。

奇妙なことに、一番下までスクロールしてデータを更新すると、tableViewそれらの列のサイズが正しく変更されます。tableView下に長いテキストがあることを知らなかったかのようです。

それで、私の質問は、すべてのデータに基づいてこれらの列のサイズが最大になるようにするにはどうすればよいですか?

私のコード

QSqlTableModel *model = new QSqlTableModel;
model->setTable("item");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();    
tableResult->setModel(model);    
tableResult->setEditTriggers(QAbstractItemView::NoEditTriggers);    
tableResult->setSelectionBehavior(QAbstractItemView::SelectRows);
tableResult->setSelectionMode(QAbstractItemView::SingleSelection);    
tableResult->resizeColumnsToContents();
tableResult->resizeRowsToContents();

更新 1

試してみましtableResult->scrollToBottom()たが、下部のアイテムに基づいてのみサイズが変更されます。そのため、途中に長い単語がある場合、それらの単語は折り返されます。

更新 2

私が話していることを理解したい人は、この例をダウンロードしてください。PushButton をクリックすると、正しくサイズ変更されていないデータが生成されることがわかります。

アップデート 3

おそらくバグ: https://bugreports.qt.io/browse/QTBUG-9352

4

3 に答える 3

43

この問題の回避策を見つけることができました。呼び出す前にテーブルを非表示にするだけですresizeColumnsToContents()

例:

tableResult->setVisible(false);
tableResult->resizeColumnsToContents();
tableResult->setVisible(true);
于 2010-08-10T01:52:09.387 に答える
7

これは、QSqlTableModelがオンデマンドでデータをロードし、ビューが使用可能なデータのみに基づいて列幅を計算するためだと思います。列のサイズをユーザーが変更できるようにする必要がない場合は、次のことを試すことができます。

tableResult->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
于 2010-08-09T00:49:16.033 に答える