Итак, у меня есть этот QFrame
, который является родительским виджетами (представлен кодом в коде). В этом виджете я хочу разместить QWidget
с 10 px сверху (и 10 пикселей снизу, в результате чего он будет иметь высоту 140 пикселей, а родительский - 160 пикселей). QWidget
будет иметь ряд пользовательских кнопок внутри него в вертикальной компоновке в области прокрутки, так что, когда высота сочетаемых кнопок превышает высоту QWidget's
(140 пикселей), прокрутки автоматически устанавливаются. Поскольку прокрутка не для всего родительского виджета, но только для дочернего виджета, свиток должен применяться только к дочернему виджету. Вот мой код:QScrollArea работает не так, как ожидалось, с QWidget и QVBoxLayout
//this is a custom button class with predefined height and some formatting styles
class MyButton: public QPushButton
{
public:
MyButton(std::string aText, QWidget *aParent);
};
MyButton::MyButton(std::string aText, QWidget *aParent): QPushButton(QString::fromStdString(aText), aParent)
{
this->setFixedHeight(30);
this->setCursor(Qt::PointingHandCursor);
this->setCheckable(false);
this->setStyleSheet("background: rgb(74,89,98); color: black; border-radius: 0px; text-align: left; padding-left: 5px; border-bottom: 1px solid black;");
}
//this is where I position the parent widget first, and then add sub widget
this->setGeometry(x,y,width,160);
this->setStyleSheet("border-radius: 5px; background:red;");
//this is the widget which is supposed to be scrollable
QWidget *dd = new QWidget(this);
dd->setGeometry(0,10,width,140);
dd->setStyleSheet("background: blue;");
QVBoxLayout *layout = new QVBoxLayout();
dd->setLayout(layout);
for (int i = 0; i < fValues.size(); i++)
{
MyButton *button = new MyButton(fValues[i],dd);
layout->addWidget(button);
}
QScrollArea *scroll = new QScrollArea(this);
scroll->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scroll->setWidget(dd);
Вопреки моим ожиданиям, это то, что я получаю (прикрепленное изображение). Что я делаю неправильно, и как я могу это исправить?
Это имеет смысл наблюдать отладочные сообщения. – AlexanderVX