在qt窗口中添加滚动条?

时间:2012-10-21 07:36:03

标签: c++ qt

我一直在从视频教程here学习qt。 我已经完成了35个视频。所以我想创建一个示例应用程序只是为了理解qt。 我正在使用最新版本的qt creator。

我添加了一些按钮&删除菜单栏&主窗口中的工具栏。

enter image description here

运行后我发现,如果我调整窗口大小,则不会出现滚动条。

enter image description here

我不希望按钮调整大小或移动。我很好,他们变得不可见,但我想要滚动条,以便用户可以滚动到不可见的部分。 我添加了一个滚动区域小部件,但它不起作用。我通过在互联网上搜索做了一些编码,但这也没有用。当我将滚动区域的大小增加到窗口大小;运行窗口后显示为空白。也许按钮位于滚动区域的“下方”。如何更改哪个对象应该在“顶部”?

因为我只是一个初学者,我不知道什么是使用qt设计的最佳方法。我应该使用设计师和放大器来放置所需的小部件吗?然后通过编码给出他们的特征?或者我应该使用设计师完成设计?或者我应该放弃设计师和做完整的编码? 谢谢!

修改 @Synxis, 这没什么帮助。我甚至使用了secentralwidget(ui-> scrollareacontentswidget); 我尝试删除centralwidget QWidget,但我不能。 任何解决方案?

enter image description here

2 个答案:

答案 0 :(得分:3)

QWidget没有滚动条,您需要添加一个包含滚动条的区域。

只需在窗口中添加QScrollArea,然后将所有小部件放入其中(按钮等等)。不要忘记将滚动区域布局到整个主窗口。

更确切地说,层次结构是这样的:

main window central widget (with a layout)
    scroll area
        scroll area widget (with a layout, layout scroll area if you're in the designer)
            your container widget (should be layouted also)
                your buttons, layouts, etc...

(with a layout) =使用布局布局窗口小部件,但布局类型无关紧要,因为只需要布置一个窗口小部件。)

您的容器小部件应该根据需要进行布局,间隔器可能很有用。

答案 1 :(得分:0)

让QHBoxLayout成为一个简单的QWidget()对象,然后将该widget对象设置为滚动区域的小部件调用setWidget()。这些都是实际需要的。或者至少有时你需要调用setWidgetResizable(bool),如果可以使用额外的空间。示例代码如下。

#include <QtGui>

class YourWidget : public QWidget
{
public:
    YourWidget(QWidget* parent=0)
        : QWidget(parent)
    {
        QHBoxLayout* buttonLay = new QHBoxLayout;
        for (int i=0; i<10; ++i) {
            QPushButton* button = new QPushButton(tr("Button%1").arg(i));
            buttonLay->addWidget(button);
        }

        QLabel* dummyBigLabel = new QLabel(tr("DummyBigLabel"));
        dummyBigLabel->setAlignment(Qt::AlignCenter);
        dummyBigLabel->setMinimumSize(400,300);
        dummyBigLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);

        QVBoxLayout* mainLay = new QVBoxLayout(this);
        mainLay->addLayout(buttonLay);
        mainLay->addWidget(dummyBigLabel);
    }
};

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

QWidget* topLevelWidget = 0;
    YourWidget* editor = new YourWidget;
#ifdef USE_NO_SCROLL_AREA
    topLevelWidget = editor;
#else
    QScrollArea* scroller = new QScrollArea;
    scroller->setWidget(editor);
    topLevelWidget = scroller;
#endif
    topLevelWidget->show();
    topLevelWidget->raise();
    return app.exec();
}