在滚动区域中使用自定义Qt类并强制不调整元素大小,但滚动条显示

时间:2014-06-23 12:04:33

标签: c++ qt

我试图解决这个问题几天但我没有取得任何进展,我想我错过了什么,请帮我解决。

在主窗口中,我创建了滚动区域并给它垂直布局。我创建了Qt Designer类(myform.h,myform.cpp和myform.ui)并放置了一些按钮+垂直布局。

这是" myform.ui":http://oi59.tinypic.com/23sch2r.jpg

我希望主窗口中的滚动区域包含" myform.ui",以及" myform.ui"中的元素。不会调整大小,但会在滚动区域中显示滚动条。

我的mainwindow.cpp是

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myform.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    MyForm* myform = new MyForm(this);
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(myform);

    ui->scrollArea->setWidgetResizable(false);
    ui->scrollArea->setLayout(layout);

}

MainWindow::~MainWindow()
{
    delete ui;
}

问题是滚动条没有出现,并且在调整窗口大小时正在调整元素的大小。

图片:http://oi62.tinypic.com/w83xvp.jpg

这只是举例说明我遇到的问题的最小例子。

1 个答案:

答案 0 :(得分:0)

根据QScrollArea的文档,您似乎必须将背景窗口小部件设置为滚动区域。此代码直接取自QScrollArea小部件的文档:

QLabel *imageLabel = new QLabel;
QImage image("happyguy.png");
imageLabel->setPixmap(QPixmap::fromImage(image));

scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);

制作图像标签。像素图被加载到其中。然后滚动区域小部件由setWidget()命令指定。

在您的代码中,我认为ui->scrollArea->setLayout(layout);

应该是

ui->scrollArea->setWidget(layout);代替。

注意:我没有测试过此代码,但认为它可以解决您的问题。