对于任务,我需要使用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
非常感谢您的参考和链接。 –