4

QSqlQueryModelを使用してQTableViewを使用しています(SQLite からデータをフェッチします)。

アイテムのデリゲートとして使用するQStyledItemDelegateサブクラスが呼び出されます。次のようなsizeHint()メソッドMiniItemDelegateを設定します。

QSize MiniItemDelegate::sizeHint(const QStyleOptionViewItem &option,
                                 const QModelIndex &index) const
{
    // just for testing...breakpoint shows this line never gets called
    return QSize(256,256);  
}

次のコードを実行したときに、このメソッドが呼び出されない理由がわかりません。

m_pMiniItemDelegate = new MiniItemDelegate(this);
ui->PList_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->PList_tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->PList_tableView->setItemDelegate(m_pMiniItemDelegate);
ui->PList_tableView->setAlternatingRowColors(true);
ui->PList_tableView->setModel(ListMiniSqlModel::instance());

これも機能しません:

ui->PList_tableView->resizeColumnsToContents();
ui->PList_tableView->resizeRowsToContents();

これもありません:

QHeaderView* headerView = ui->PList_tableView->horizontalHeader();
headerView->setResizeMode(QHeaderView::ResizeToContents);
4

3 に答える 3

3

QStyledItemDelegate::sizeHint は、QTableView::resizeRowsToContents、QTableView::resizeRowToContents、QTableView::resizeColumnsToContents、および QTableView::resizeColumnToContents が呼び出された場合にのみ役立ちます。または使用

QHeaderView* headerView = tableView->horizontalHeader();
headerView->setResizeMode(QHeaderView::ResizeToContents);
于 2013-05-29T15:01:31.680 に答える
1

(クレジットが必要な場合はクレジット。 ) Qt フォーラムのディスカッションに関する@ HostileForkのコメントには、コメント スレッドがあります。そのスレッド内で、ユーザーmikhailtが適切なソリューションを提供しています。

verticalHeaderには、調整可能なDefaultSectionSizeプロパティがあります。垂直ヘッダー (表の左側のラベル) が実際に表示されているかどうかは問題ではなく、サイズは引き続き使用されます。

ui->PList_tableView->verticalHeader()->setDefaultSectionSize(34);

これにより、Qt 5.6 での問題が解決され、各データ行の高さを個別に調整したり、テーブルのサイズを変更したりする必要がなくなりました。

私が見つけたコメント スレッドの年齢に基づいて、これは Qt 4 でも既に機能していました。

于 2016-06-27T11:25:02.963 に答える
1

setColumnWidthまたはsetRowHeighthorizo​​ntalHeader()->setResizeMode(QHeaderView::Fixed)を試しましたか?

于 2012-03-21T11:24:40.637 に答える