我有一個帶有一些按鈕的QScrollArea,如圖片所示。 帶動態變化內容的QScrollArea
佈局的思路是: 1.左側和右側的按鈕應該被用於滾動按鈕的時候都太寬
2.數字在滾動區域的按鈕可以改變動態 3.應儘可能使用任何空閒空間來擴大滾動區域。如果沒有這樣的空間存在導航按鈕應該用於滾動。
以我目前的執行情況時,我提高了按鈕,我有這樣的:
但在右邊的自由空間,所以這應該是這樣的:
如果我增加一次,以10例如,那麼應該出現滾動條(因爲佈局是由小部件固定的)。
我想知道是否有任何其他方式除了小部件的手動調整大小(因爲UI可以翻譯和按鈕可以改變大小也暗示真正的設計更爲複雜:(
這裏是我的實現在ScrollAreaTest widget的:
#include "MainWidget.h"
#include <QLineEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QScrollArea>
#include <QPushButton>
#include <QDebug>
#include "ButtonWidget.h"
#include "CheckableButtonGroup.h"
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent),
m_scrollArea(0),
m_lineEdit(0),
m_buttons(0)
{
QVBoxLayout* mainLayout = new QVBoxLayout(this);
QWidget* firstRow = new QWidget;
QHBoxLayout* firstRowLayout = new QHBoxLayout(firstRow);
QPushButton* left = new QPushButton;
QPushButton* right = new QPushButton;
m_buttons = new CheckableButtonGroup(Qt::Horizontal);
m_buttons->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_buttons->setButtonsCount(5);
m_buttons->setStyleSheet("border: none");
QWidget* const buttonsContainer = new QWidget;
QHBoxLayout* const buttonsContainerLayout = new QHBoxLayout(buttonsContainer);
buttonsContainerLayout->setSpacing(0);
buttonsContainerLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
buttonsContainerLayout->setMargin(0);
buttonsContainerLayout->addWidget(m_buttons, 0, Qt::AlignLeft);
qDebug() << m_buttons->buttons()[ 0 ]->size();
m_scrollArea = new QScrollArea;
m_scrollArea->setContentsMargins(0, 0, 0, 0);
m_scrollArea->setWidget(buttonsContainer);
m_scrollArea->setWidgetResizable(true);
m_scrollArea->setStyleSheet("border: 1px solid blue");
m_scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
firstRowLayout->addWidget(left , 0, Qt::AlignLeft);
firstRowLayout->addWidget(m_scrollArea, 1, Qt::AlignLeft);
firstRowLayout->addWidget(right , 0, Qt::AlignLeft);
m_lineEdit = new QLineEdit;
QPushButton* button = new QPushButton;
QHBoxLayout* secondRowLayout = new QHBoxLayout;
secondRowLayout->addWidget(m_lineEdit);
secondRowLayout->addWidget(button);
connect(button, SIGNAL(clicked()), SLOT(setButtonsCount()));
mainLayout->addWidget(firstRow, 1, Qt::AlignLeft);
mainLayout->addLayout(secondRowLayout);
button->setText("Set buttons count");
buttonsContainer->resize(m_buttons->buttonsOptimalWidth(), buttonsContainer->height());
m_buttons->resize(m_buttons->buttonsOptimalWidth(), m_buttons->height());
//area->resize(100, area->height());
//area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
MainWidget::~MainWidget()
{
}
void MainWidget::setButtonsCount()
{
m_buttons->setButtonsCount(m_lineEdit->text().toInt());
}
這裏是包含了存在問題的整個Qt工程: https://drive.google.com/file/d/0B-mc4aKkzWlxQzlPMEVuNVNKQjg/edit?usp=sharing
我有一個類似滾動區域和我想知道如果它是可以具有這些的按鈕佈置4個按鈕/行(如我看到上面的例子)。 [?] –
@groenhen確定可以按照你想要的方式安排它們。 –
已經做到了。現在我試圖找出一種方法來獲得一行間隔,我的意思是跳過一行,並在這個「虛擬」空間之後放置新的按鈕... –