私はQtを初めて使用し、QTableViewを自分のモデルで動作させることができました。 3列固定です。ウィンドウを開くと、見た目は問題ありませんが、ウィンドウのサイズを変更すると、QTableView自体のサイズが変更されますが、列の幅は変わりません。それを機能させるための組み込みの方法はありますか?ウィンドウがサイズ変更されるたびに、QTableViewの端に合うように列のサイズを変更する必要があります。
サイズ変更された場合に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のサブクラスです。
このコードは、各列がテーブルの幅に合うように均等に引き伸ばします。
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ドキュメント:
ウィジェット QTableView 、 QTreeView およびその派生クラス( QTableWidget など)には、次の2つの便利なメソッドがあります。
QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;
クラス QHeaderView のドキュメントを開くと、アイテムビューの行または列ヘッダーの外観と動作を設定するメソッドが見つかります。次のいずれかの方法で問題を解決できます。
void QHeaderView :: stretchLastSection(bool stretch)
As Davy Jones 言及。
例:
QTableView *table = new QTableView();
table->horizontalHeader()->setStretchLastSection(true);
void QHeaderView :: setResizeMode(ResizeMode mode)
modeとして、QHeaderView :: StretchまたはQHeaderView :: ResizeToContentsを設定できます。
残念ながら、この方法には欠点があります-適用後、列(または行)のサイズを手動(GUI)またはプログラムで変更することはできません。
例:
QTableView *table = new QTableView();
table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);