使用 QT 分层组件

Posted

技术标签:

【中文标题】使用 QT 分层组件【英文标题】:Layering components with QT 【发布时间】:2010-10-26 22:04:37 【问题描述】:

我正在使用 QT Creator 开发一个小型 GUI 应用程序。我有一个跨越整个窗口的 GraphicsView 组件。我的问题是,如何在应用程序的四个角中的每一个中放置其他小部件(例如透明按钮)。另外,我怎样才能确保右下角的组件被正确调整大小,以便它们保持在右下角。

【问题讨论】:

你说的是场景中的 QGraphicsItems 按钮还是 QGraphicsView 上的 QWidgets?我也不确定可调整大小的按钮,这不是常见的按钮行为,所以一些上下文可能会有所帮助:) 嗨,按钮是标准的 QT 按钮(虽然可以是其他小部件,如复选框项目)。它们不可调整大小,但我希望它们的位置保持在右下角,而不是在屏幕中心,因为我将窗口变大。 【参考方案1】:

好的,您可以将布局和QWidgets 添加到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 分层组件的主要内容,如果未能解决你的问题,请参考以下文章

使用分层实现业务处理

Qt Creator qml:使用(额外)Qt 组件库(ubuntu)

使用组件未找到 Qt 文件

如何用Qt实现组件供QML使用

13.QT-QMainWindow组件使用

Druid连接池&Template组件&三级分层开发,模拟账号登陆