2017-05-15 1 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

I 추가 코드의 한 줄을 주석 처리 한 다음 (일부 줄의 순서를 바꾸고 순서를 변경 한 후 다음 번에 MCVE을 제공하십시오),

postsLayout->setSizeConstraint(QLayout::SetMinAndMaxSize); 
귀하의 생성자에

.

QScrollArea with QLabels

공지 사항 하단에있는 컷.

참고로 나는 꽤 좋은 것을 제안한다. documentation. QScrollArea (주제가 QScrollBars 인 곳)에 대한 추가 주제는 this example을 통해 작업하시기 바랍니다.


또한 사용자의 접근 방식이 사용자의 작업에 적합하지 않다고 주장 할 수도 있습니다.

+0

참조 및 링크 주셔서 감사합니다. –