1
所以我有我的Qt應用程序中的以下佈局的東西。QScrollArea動態調整subWidgets
QScroll Area
- QSrollArea's InternalWidget
-QVBoxLayout
-Layout 1
- some items
- QTableView
-Layout 2
- some items
- QTableView
的QTableViews的內容是動態變化的,我想是每個表視圖的那樣大,因爲它必須是(無progressbars並且沒有空的空間)。我寫了一個函數來計算表的適當大小。問題是,當我動態調整其中一個TableViews時,它會在第二個視圖後面進行調整(而且應該發生的是整個第二個佈局會在第一個視圖中移動)。此外,在縮小表格視圖時,它與第二個佈局之間留有空白區域。
這裏是當我安排小部件代碼:
#include "Widget.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QTableView>
#include <QStringBuilder>
#include <QHeaderView>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent),
m_tableView1(0),
m_tableView2(0),
m_model1(0),
m_model2(0),
m_numberOfRowsEdit(0)
{
this->resize(300, 520);
QVBoxLayout* mainLayout = new QVBoxLayout(this);
QScrollArea* mainArea = new QScrollArea();
//mainArea->setWidgetResizable(true);
QWidget* scrollAreaWidget = new QWidget;
scrollAreaWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
QVBoxLayout* scrollAreaWidgetLayout = new QVBoxLayout(scrollAreaWidget);
scrollAreaWidgetLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
QVBoxLayout* firstSubLayout = new QVBoxLayout;
QLabel* label = new QLabel("Label 1");
m_tableView1 = new QTableView;
firstSubLayout->addWidget(label);
firstSubLayout->addWidget(m_tableView1);
scrollAreaWidgetLayout->addLayout(firstSubLayout);
QVBoxLayout* secondSubLayout = new QVBoxLayout;
QLabel* label2 = new QLabel("Label 2");
m_tableView2 = new QTableView;
secondSubLayout->addWidget(label2);
secondSubLayout->addWidget(m_tableView2);
scrollAreaWidgetLayout->addLayout(secondSubLayout);
mainArea->setWidget(scrollAreaWidget);
mainLayout->addWidget(mainArea);
// Utility for dynamically changing rows
QHBoxLayout* hLayout = new QHBoxLayout;
QLabel* numberOfRowsLabel = new QLabel("Number of rows");
m_numberOfRowsEdit = new QLineEdit;
QPushButton* numberOfRowsButton = new QPushButton("Apply");
connect(numberOfRowsButton, SIGNAL(clicked()), SLOT(onApplyButtonPressed()));
hLayout->addWidget(numberOfRowsLabel);
hLayout->addWidget(m_numberOfRowsEdit);
hLayout->addWidget(numberOfRowsButton);
m_model1 = new QStandardItemModel(this);
m_tableView1->setModel(m_model1);
m_model2 = new QStandardItemModel(this);
m_tableView2->setModel(m_model2);
mainLayout->addLayout(hLayout);
}
Widget::~Widget()
{
}
QSize Widget::calculateTableDesiredSize(QTableView* const table) {...}
void Widget::onApplyButtonPressed()
{
bool ok = false;
const int rowCount = m_numberOfRowsEdit->text().toInt(&ok);
if (!ok)
{
return;
}
this->initModel(m_model1, rowCount);
}
// inits model with rowCount rows
void Widget::initModel(QStandardItemModel* const model, const int rowCount )
void Widget::resizeTable(QTableView* const table)
如何調整表格大小?嘗試使用'setFixedHeight()'。 –
是的,setFixedHeight()表現良好。當我增加heigth時,小部件不會超越鄰居。但是,當我縮小firstTableView仍然留下一個空的空間。將所有小部件對齊到Top不會修復剩餘的空間。也許調整sizePolicy應該做的伎倆? – GeneralFailure
嘗試在所有項目之後將'addStretch()'添加到'scrollAreaWidgetLayout'。 –