私はQTを初めて使用しています。私はそのモデルでQTableViewの動作を管理しました。 3つの列が固定されています。私はウィンドウを開いてもOKですが、ウィンドウのサイズを変更すると、QTableView自体のサイズは変更されますが、カラムの幅は変わりません。それを動作させるための組み込みの方法はありますか? 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のサブクラスです。あなたはクラスQHeaderViewためのオープンドキュメント、あなたはの外観と動作を設定する方法を見つける場合
QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;
:
ウィジェットQTableView、QTreeViewと(例えばQTableWidgetなど)、その派生クラスは、この2便利なメソッドを持っていますアイテムビューの行ヘッダーまたは列ヘッダー。言及Davy Jonesとして
void QHeaderView::stretchLastSection(bool stretch)
:あなたはこれらのいずれかの方法で、あなたの問題を解決することができます。例:あなたはQHeaderView ::ストレッチやQHeaderViewを設定することができますモード:: ResizeToContentsとして
QTableView *table = new QTableView(); table->horizontalHeader()->setStretchLastSection(true);
void QHeaderView::setResizeMode(ResizeMode mode)
。
残念ながら、このメソッドには欠点があります。適用後、列(または行)のサイズを手動で(GUIで)またはプログラムで変更することはできません。例:彼らは、テーブルの幅に合うように
QTableView *table = new QTableView(); table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
このコードは、均等に各列をstretchs。
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ドキュメント:
- QHeaderView::setSectionResizeMode
- モードhereのサイズを変更するを参照してください。
私はあなたに今キスしたい、ちょうど冗談;-) ..私はこの行のために長い間見てきました..ありがとう –
パーフェクト...これは、TableViewストレッチ/スケーリングの問題のための完璧なソリューションです..本当にありがとうロット.. – Maxx
いつも列の幅を同じにしますか?そうでない場合は、table-> horizontalHeader() - > setStretchLastSection(true)を呼び出して、最後の列の幅を引き伸ばすことができます。 –