使用 QT 分层组件
Posted
技术标签:
【中文标题】使用 QT 分层组件【英文标题】:Layering components with QT 【发布时间】:2010-10-26 22:04:37 【问题描述】:我正在使用 QT Creator 开发一个小型 GUI 应用程序。我有一个跨越整个窗口的 GraphicsView 组件。我的问题是,如何在应用程序的四个角中的每一个中放置其他小部件(例如透明按钮)。另外,我怎样才能确保右下角的组件被正确调整大小,以便它们保持在右下角。
【问题讨论】:
你说的是场景中的 QGraphicsItems 按钮还是 QGraphicsView 上的 QWidgets?我也不确定可调整大小的按钮,这不是常见的按钮行为,所以一些上下文可能会有所帮助:) 嗨,按钮是标准的 QT 按钮(虽然可以是其他小部件,如复选框项目)。它们不可调整大小,但我希望它们的位置保持在右下角,而不是在屏幕中心,因为我将窗口变大。 【参考方案1】:好的,您可以将布局和QWidget
s 添加到QGraphicsView
,以便它们覆盖下面的视图。你不能用 QtDesigner 做到这一点(我假设 QtCreator 也是如此),所以你必须在代码中做到这一点。您可以将以下代码放入包含QGraphicsView
(命名视图)的窗口的构造函数中,它会在布局中添加两个按钮,将它们固定在视图的右下角:
QGridLayout *gridLayout;
QSpacerItem *horizontalSpacer;
QSpacerItem *verticalSpacer;
QPushButton *button1;
QPushButton *button2;
gridLayout = new QGridLayout(view);
horizontalSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
button1 = new QPushButton(view);
button1->setText("Button1");
button2 = new QPushButton(view);
button2->setText("Button2");
gridLayout->addWidget(button1, 1, 1, 1, 1);
gridLayout->addWidget(button2, 1, 2, 1, 1);
gridLayout->addItem(horizontalSpacer, 1, 0, 1, 1);
gridLayout->addItem(verticalSpacer, 0, 2, 1, 1);
多加两个按钮和两个隔板,在窗口的每个角落实现一个按钮,应该不会太麻烦。
使标准QWidget
控件透明可能有点棘手,尤其是按钮。标签很容易。您可以参考我的answer to another question here 以获得一些使QPushButtons
透明的提示。
【讨论】:
哇!至少这是我第一次能够使用 Qt 创建分层布局!谢谢!但这并不理想。我的意思是..必须有一些官方的方式。那么 QDesigner 中的“Send Back”“Send Front”功能是什么? ://【参考方案2】:好的,我现在用 PySide 尝试了,结果还不错。与破解生成的 ui 文件相反,我建议以后再做! 所以我在 QGridLayout 中设计了 2 个单元格并将所有内容并排排列。编译它并在构建用户界面时:
# take 2nd item and add it back to 0, 0 cell in the grid layout
layer = self.ui.gridLayout.takeAt(1)
self.ui.gridLayout.addLayout(layer, 0, 0, 1, 1)
【讨论】:
以上是关于使用 QT 分层组件的主要内容,如果未能解决你的问题,请参考以下文章