在我们开始之前,这可能是Qt Scroll Area does not add in scroll bars的可能重复,但是用户提供的答案似乎适用于OP,对我来说不起作用。我担心这可能与版本有关吗?或者我错过了什么? (这是可能的!)
好吧,对于那些了解Qt的人来说,我是一个初学者,我有一个看起来很愚蠢的问题,但是给我带来了很多麻烦:
我想按下按钮并将项目添加到容器中,然后应该可以将其向下滚动。就这么简单。
所以我认为也许将一个布局设置为scrollArea可以完成这项工作。它确实添加了我想要的项目,但它并没有加载scrollBar。我已经检查了ScrollPolicy,但没有满足我的问题。就好像GVBoxLayout不会增加大小并且不会让滚动区域滚动。
有没有人知道如何修复它?
以下代码:
saleWindow.h
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QListWidget>
#include<QString>
namespace Ui {
class SaleWindow;
}
class SaleWindow : public QMainWindow
{
Q_OBJECT
public:
explicit SaleWindow(QWidget *parent = 0);
~SaleWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::SaleWindow *ui;
QVBoxLayout *gBoxLayout;
QMap<QString, QListWidget *> m_mappings;
};
#endif // SALEWINDOW_H
saleWindow.cpp
#include "salewindow.h"
#include "ui_salewindow.h"
#include <iostream>
#include <QGroupBox>
#include <QLabel>
//#include <QtSql/QSqlDatabase>
//#include <QtSql>
#include <QtWidgets/QPushButton>
SaleWindow::SaleWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::SaleWindow),
gBoxLayout(new QVBoxLayout())
{
ui->setupUi(this);
// Adding layout to scrollbar
{
ui->scrollArea_sales->setWidgetResizable(true);
ui->scrollArea_sales->setLayout(gBoxLayout);
QWidget *central = new QWidget;
ui->scrollArea_sales->setWidget(central);
}
}
SaleWindow::~SaleWindow()
{
delete ui;
delete gBoxLayout;
}
void SaleWindow::on_pushButton_clicked()
{
QGroupBox *sale = new QGroupBox();
sale->setTitle("minha venda");
gBoxLayout->addWidget(sale);
ui->scrollArea_sales->setLayout(gBoxLayout);
}
答案 0 :(得分:2)
如果从ui编辑器使用QScrollArea作为scrollArea_sales对象,则可以在对象检查器(qtdesigner)中看到QScrollArea中的默认窗口小部件,因此您无需添加它。试试这段代码:
// Adding layout to scrollbar(on the contrctor, replace yor scope by)
{
ui->scrollArea_sales->widget()->setLayout(gBoxLayout);
}
void MainWindow::on_pushButton_clicked() {// on the slot replace all by:
QGroupBox *sale = new QGroupBox();
sale->setTitle("minha venda");
ui->scrollArea_sales->widget()->layout()->addWidget(sale);
}