在场景中添加带有按钮的scrolabble窗口

时间:2019-03-01 21:26:16

标签: c++ qt qt5 qtwidgets

我试图添加一个具有可滚动布局的框(位置:1140、485和尺寸:225、365),并在布局内添加按钮。我不希望框移动/调整大小。我希望该框具有一个滚动条,通过该滚动条我们可以滚动其中的所有按钮。

到目前为止,我的代码根本无法正常工作,我得到的只是一个带有按钮的布局,上面有一个拉伸框(我不想要)。到目前为止,唯一起作用的是将按钮以正确的方式添加到框中。

我需要做的是使该框可滚动,并使其在按钮过多时不会调整其大小。

这是我的代码:

QWidget *box = new QWidget(); //creating the box and placing it where I want it
box->move(1145, 485);
box->resize(225, 365);

gameScene->addWidget(box); //adding it to the main scene

//where AM i supposed to use this?
QScrollArea *scrollArea = new QScrollArea();

QGridLayout *layout = new QGridLayout();
box->setLayout(layout);

//testButtons
QPushButton *testButton1 = new QPushButton("Button1");
layout->addWidget(testButton1);
   ....
QPushButton *testButtonN = new QPushButton("ButtonN");
layout->addWidget(testButtonN);

My Project Image

您可以在底部右侧看到标题为GAME TRANSCRIPT的框。 我只希望该框包含其原样的按钮。但是我不希望它调整大小,并且我希望它可以滚动,因为它切断了底部的按钮。

1 个答案:

答案 0 :(得分:2)

QScrollArea setWidget接受QWidget作为参数。 这意味着您必须将按钮作为子级添加到布局中,并且将布局作为子级添加到小部件中,然后才能将小部件设置为QScrollArea的子级。请参见下面的示例:

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("button1");
QPushButton *button2 = new QPushButton("button2");
QPushButton *button3 = new QPushButton("button3");
QPushButton *button4 = new QPushButton("button4");
QPushButton *button5 = new QPushButton("button5");

QGridLayout * mainLayout = new QGridLayout;
QWidget* buttonsContainer = new QWidget;
QVBoxLayout *buttonsContainerLayout = new QVBoxLayout;
QScrollArea *scrollArea = new QScrollArea();

buttonsContainerLayout->addWidget(button1);
buttonsContainerLayout->addWidget(button2);
buttonsContainerLayout->addWidget(button3);
buttonsContainerLayout->addWidget(button4);
buttonsContainerLayout->addWidget(button5);

buttonsContainer->setLayout(buttonsContainerLayout);

scrollArea->setWidget(buttonsContainer);

mainLayout->addWidget(scrollArea);

window->setLayout(mainLayout);
window->setWindowTitle(
    QApplication::translate("testscrollable", "Test Scrollable"));
window->show();

注意https://doc.qt.io/qt-5/qscrollarea.html#setWidget