2017-05-15 26 views
0

对于任务,我需要使用C++和Qt创建一个类似于WordPress的CMS。在主页面中,所有帖子必须显示在带滚动条的区域中。我试过使用QScrollArea,但问题似乎是布局。它缩小内部物体以适应所提供的高度。我试图通过设置对象的大小策略来解决这个问题,但令人惊讶的是,这根本没有任何区别!制作可滚动区域的小部件

这里的代码我试图使窗口:

#include "cms.h" 
#include "user.h" 
#include "post.h" 
#include "uipost.h" 
#include <QStyle> 
#include <QDesktopWidget> 
#include <QHBoxLayout> 
#include <QVBoxLayout> 
#include <QScrollArea> 
#include <QPushButton> 
#include <QMenuBar> 
#include <QMenu> 
#include <QAction> 
#include <QLabel> 
#include <QSizePolicy> 

CMS::CMS(User & SignedInUser, QWidget *parent) : QWidget(parent), signedInUser(SignedInUser) { 
    User admin; 
    Post temp(admin); 

    QHBoxLayout *mainLayout = new QHBoxLayout(); 

    QScrollArea *posts = new QScrollArea(); 
    posts->setWidgetResizable(true); 
    posts->setFrameShape(QFrame::NoFrame); 
    QVBoxLayout *postsLayout = new QVBoxLayout(posts); 
    for (int i = 0; i < 50; i++) { 
    QLabel *label = new QLabel(tr("some sample label")); 
    postsLayout->addWidget(label); 
    /* Here the posts will be read from file and shown. Since the class for posts isn't still ready, I'm just trying to try it with label and later on use that class. 
    * That class inheritances QFrame. 
    */ 
    } 

    QVBoxLayout *buttonsLayout = new QVBoxLayout(); 
    buttonsLayout->setAlignment(Qt::AlignTop); 
    QPushButton *manUsers = new QPushButton(tr("Manage Users")); 
    buttonsLayout->addWidget(manUsers); 
    QPushButton *addUser = new QPushButton(tr("Add a User")); 
    buttonsLayout->addWidget(addUser); 
    QPushButton *logout = new QPushButton(tr("Log Out")); 
    buttonsLayout->addWidget(logout); 
    QPushButton *exit = new QPushButton(tr("Exit")); 
    buttonsLayout->addWidget(exit); 

    mainLayout->addWidget(posts); 
    mainLayout->addLayout(buttonsLayout); 
    setLayout(mainLayout); 

    setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, size(), QDesktopWidget().availableGeometry())); // Centerizing the window 
    setFixedSize(size()); // Making the window unresizable 

    connect(exit, &QPushButton::clicked, this, &QWidget::close); 
} 

类定义不包含任何具体的,但只是为了确保没有错失:

#ifndef CMS_H 
#define CMS_H 

#include <QMainWindow> 
#include "user.h" 

namespace Ui { 
    class CMS; 
} 

class CMS : public QWidget { 
    Q_OBJECT 
private: 
    User & signedInUser; 
public: 
    CMS(User & SignedInUser, QWidget *parent = nullptr); 
}; 

#endif // CMS_H 

回答

0

我找到了解决方案。显然,我需要定义一个小部件,将滚动区域设置为该小部件,然后将包含元素的布局设置为小部件。

1

我加(注释和重新排序某行后,请在下一次提供MCVE),这是

postsLayout->setSizeConstraint(QLayout::SetMinAndMaxSize); 

给你的构造函数。

QScrollArea with QLabels

注意切口底部。

仅供参考我建议不错documentation。对于QScrollArea(地狱是QScrollBars?)的其他主题,我建议你通过this example工作。


另请注意,有人可能会认为您的方法不适合您的任务。

+0

非常感谢您的参考和链接。 –