web-dev-qa-db-ja.com

列はQTableViewのサイズに自動サイズ変更されます

私はQtを初めて使用し、QTableViewを自分のモデルで動作させることができました。 3列固定です。ウィンドウを開くと、見た目は問題ありませんが、ウィンドウのサイズを変更すると、QTableView自体のサイズが変更されますが、列の幅は変わりません。それを機能させるための組み込みの方法はありますか?ウィンドウがサイズ変更されるたびに、QTableViewの端に合うように列のサイズを変更する必要があります。

24
khajvah

サイズ変更された場合にQTableViewの最後の列が親を埋めるようにするヘッダーフラグがあります。次のように設定できます。

table_view->horizontalHeader()->setStretchLastSection(true);

ただし、他の列のサイズは比例して変更されません。同様にそれを行いたい場合は、親のresizeEvent内で次のように処理できます。

void QParent::resizeEvent(QResizeEvent *event) {
    table_view->setColumnWidth(0, this->width()/3);
    table_view->setColumnWidth(1, this->width()/3);
    table_view->setColumnWidth(2, this->width()/3);

    QMainWindow::resizeEvent(event);
}

QParentクラスはQMainWindowのサブクラスです。

27
Davy Jones

このコードは、各列がテーブルの幅に合うように均等に引き伸ばします。

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

ドキュメント:

52
frogatto

ウィジェット QTableViewQTreeView およびその派生クラス( QTableWidget など)には、次の2つの便利なメソッドがあります。

QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;

クラス QHeaderView のドキュメントを開くと、アイテムビューの行または列ヘッダーの外観と動作を設定するメソッドが見つかります。次のいずれかの方法で問題を解決できます。

  1. void QHeaderView :: stretchLastSection(bool stretch)
    As Davy Jones 言及。

    例:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setStretchLastSection(true);
    
  2. void QHeaderView :: setResizeMode(ResizeMode mode)
    modeとして、QHeaderView :: StretchまたはQHeaderView :: ResizeToContentsを設定できます。
    残念ながら、この方法には欠点があります-適用後、列(または行)のサイズを手動(GUI)またはプログラムで変更することはできません。

    例:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    
4
iamantony