以下代码(Qt 5,Qt 4.8 行为相同)使用
两个小部件之间有什么属性导致它们的行为不同,一个被居中,另一个处于固定位置?
我该如何影响对齐方式(可能可以添加灵活的间隔器来修复,但理想情况下我希望避免这种方法)?我尝试使用
QGridLayout
在 QScrollArea
上方和左侧添加小部件(以后可用作标题)。请保留 HTML 标记。#include <QApplication>
#include <QMainWindow>
#include <QGridLayout>
#include <QScrollArea>
class ColoredWidget : public QWidget {
public:
ColoredWidget(const QColor& color, QWidget* parent) : QWidget(parent) {
QPalette pal;
QBrush brush(color);
brush.setStyle(Qt::SolidPattern);
pal.setBrush(QPalette::Active, QPalette::Window, brush);
setPalette(pal);
setAutoFillBackground(true);
}
};
class MainWindow : public QMainWindow {
public:
MainWindow(QWidget* parent) : QMainWindow(parent) {
resize(300, 400);
QWidget* centralwidget = new ColoredWidget(QColor(0xff, 0xf0, 0xb5), this);
QGridLayout* layout = new QGridLayout();
centralwidget->setLayout(layout);
setCentralWidget(centralwidget);
// create widget with fixed height of 20 px and maximum width of 200
QWidget* topHeader = new ColoredWidget(Qt::green, centralwidget);
topHeader->setMaximumWidth(200);
topHeader->setFixedHeight(20);
// create widget with fixed width of 20 px and maximum height of 200
QWidget* leftHeader = new ColoredWidget(Qt::blue, centralwidget);
leftHeader->setFixedWidth(20);
leftHeader->setMaximumHeight(200);
// create scroll area as main widget
QWidget* view = new QScrollArea();
layout->addWidget(topHeader, 0, 1);
layout->addWidget(leftHeader, 1, 0);
// layout->addWidget(leftHeader, 1, 0, Qt::AlignTop); // widget not displayed at all!
layout->addWidget(view, 1, 1);
}
};
int main(int argc, char ** argv) {
QApplication app( argc, argv );
MainWindow win(0);
win.show();
return app.exec();
}
QGridLayout
的文档中提到“列和行的行为相同”,因此我期望这两个小部件的布局方式是相同的。然而,左边的小部件自动垂直居中,而顶部的小部件在单元格内“靠左对齐”(并且水平上不居中)。我希望左侧的小部件也处于固定位置,即与顶部对齐:两个小部件之间有什么属性导致它们的行为不同,一个被居中,另一个处于固定位置?
我该如何影响对齐方式(可能可以添加灵活的间隔器来修复,但理想情况下我希望避免这种方法)?我尝试使用
Qt::AlignTop
,但这使蓝色的小部件消失了。