如何并排执行两个 QGraphicsViews 的 50/50 布局?

Posted

技术标签:

【中文标题】如何并排执行两个 QGraphicsViews 的 50/50 布局?【英文标题】:How can I enforce a 50/50 layout of two QGraphicsViews side-by-side? 【发布时间】:2015-02-21 03:57:46 【问题描述】:

我正在尝试像这样在 Qt Designer 中以网格布局并排布置两个 QGraphicsView 小部件,但视图在 scaletranslate 调用时意外调整大小:

我不确定执行 50/50 拆分的选项是什么。在 Qt Designer 中,QGraphicsView 上最相关的设置看起来像设置 QSizePolicy,但当我将其设置为水平策略的固定时,QGraphicsView 仍然会改变大小。

我想我想做什么很清楚,但也许我的方法是错误的。我应该使用不同的布局吗?也许我可以用QGraphicsView 本身做点什么?

作为参考,以下是从 .ui 文件生成的相关部分:

void setupUi(QMainWindow* MainWindow)

    ...
    QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
    sizePolicy.setHorizontalStretch(0);
    sizePolicy.setVerticalStretch(0);
    sizePolicy.setHeightForWidth(MainWindow->sizePolicy().hasHeightForWidth());
    MainWindow->setSizePolicy(sizePolicy);

    centralwidget = new QWidget(MainWindow);
    gridLayout = new QGridLayout(centralwidget);
    graphicsView = new QGraphicsView(centralwidget);
    sizePolicy.setHeightForWidth(graphicsView->sizePolicy().hasHeightForWidth());
    graphicsView->setSizePolicy(sizePolicy);
    gridLayout->addWidget(graphicsView, 0, 0, 1, 1);
    graphicsView2 = new QGraphicsView(centralwidget);
    sizePolicy.setHeightForWidth(graphicsView2->sizePolicy().hasHeightForWidth());
    graphicsView2->setSizePolicy(sizePolicy);
    gridLayout->addWidget(graphicsView2, 0, 1, 1, 1);
    MainWindow->setCentralWidget(centralwidget);
    ...

【问题讨论】:

【参考方案1】:

如果您希望两个视图始终平等地共享水平空间,那么您可能需要做的就是:

graphicsView->setSizePolicy( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
graphicsView2->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));

【讨论】:

请注意,如果您只有这两个视图,则 QGridLayout 可能是多余的;一个水平的 QBoxLayout 就足够了。

以上是关于如何并排执行两个 QGraphicsViews 的 50/50 布局?的主要内容,如果未能解决你的问题,请参考以下文章

如何并排绑定两个视图

如何让两个不同的元素并排显示?

如何在移动设备中并排放置两个绝对定位的div? [复制]

如何并排合并两个数据框?

如何缩放并排放置的两个图像?

如何将两个或多个元素并排放置并溢出?