将QLabel派生到QScrollArea中的中心小部件

时间:2018-12-10 09:42:24

标签: c++ qt qt5

我应该如何将QLabel派生的小部件papyrus放在QScrollArea中居中?

QScrollArea *scroll_area = new QScrollArea(this);
scroll_area->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
scroll_area->setWidgetResizable(true);
scroll_area->setBackgroundRole(QPalette::Dark);
papyrus = new Papyrus(scroll_area);
scroll_area->setWidget(papyrus);
setCentralWidget(scroll_area);
resize(800, 600);

这是我正在使用的代码段,但我的窗口小部件粘在左上方...

2 个答案:

答案 0 :(得分:0)

对于this question,使用对齐属性需要为您要居中的QWidget设置固定大小(设置最小值或最大值不足-您必须调用setFixedSize()) ,否则对齐属性将被忽略。如果设置固定大小与代码的另一部分不兼容,则应尝试制作另一个QWidget,其大小可以填充滚动区域并在papyrus中居中QWidget
无论哪种情况,您都可能需要删除setWidgetResizable(true),因为这也可能会覆盖对齐方式属性。

答案 1 :(得分:0)

(main.cpp示例):

#include <QApplication>
#include "MainWindow.h"

#include <QScrollArea>
#include <QLabel>
#include <QHBoxLayout>

int main(int argc, char** argv)
{
    QApplication a(argc, argv);

    QLabel label("Label");
    label.setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

    QScrollArea area;
    area.setWidgetResizable(true);

    area.setWidget(&label);
    area.show();

    return a.exec();
}
相关问题