【问题标题】:doLayout: how to setGeometry on top of another widget?doLayout:如何在另一个小部件之上设置几何图形?
【发布时间】:2016-03-14 10:17:56
【问题描述】:

我想在这里创建自定义布局:http://doc.qt.io/qt-5/qtwidgets-layouts-flowlayout-flowlayout-cpp.html

我想要一些方法将复选框放在自定义按钮的顶部。目前有

setGeometry(QRect(QPoint(...

按钮和复选框的方法,但无论我是先为按钮还是复选框做,仍然复选框出现在按钮“下方”,我看不到/点击它。

如何在按钮上方放置复选框?

【问题讨论】:

  • 能否提供一些Button的代码?
  • @AlexanderTyapkov 它只是用于布局的 QWidget 或 QLayoutItem 但最初我把它作为 QToolButton 然后 layout->addWidget(myButton);
  • 好的。所以基本上你使用的是自定义布局,但同时你想用 setGeometry 将复选框放在按钮的顶部?将复选框放在布局中会不会更容易?
  • @AlexanderTyapkov 复选框也在布局内!我将它与 setGeometry 放在同一个位置,我的按钮在哪里,但它出现在它下方(我在按钮顶部看不到它)

标签: c++ qt layout qlayout


【解决方案1】:

我刚刚制作了这个 sn-p 来检查按钮顶部的复选框,它对我有用。

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QCheckBox>

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


    QWidget w;

    QPushButton button("Hello World!", &w);
    button.setGeometry(0,0,100,100);
    button.show();

    QCheckBox checkBox(&w);
    checkBox.setGeometry(30,30,50,50);
    checkBox.show();

    w.show();
    return a.exec();
}

如果您将更改“育儿”的顺序并希望复选框仍位于顶部:

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

    QWidget w;

QCheckBox checkBox(&w);
checkBox.setGeometry(30,30,50,50);
checkBox.show();

QPushButton button("Hello World!", &w);
button.setGeometry(0,0,100,100);
button.show();

checkBox.setParent(NULL);
checkBox.setParent(&w);

w.show();
return a.exec();

}

【讨论】:

    【解决方案2】:

    只需将复选框设置为按钮的子项,并相对于按钮调用 setGeometry。孩子总是被画在父母之上。

    QPushButton button("Hello World!", &w);
    button.setGeometry(0,0,100,100);
    button.show();
    
    QCheckBox checkBox(&button);
    checkBox.setGeometry(button.rect());
    checkBox.show();
    

    无需将复选框放入布局中。

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 1970-01-01
      • 2019-01-30
      • 2021-06-01
      • 1970-01-01
      • 2019-03-09
      • 2016-09-16
      • 2018-10-30
      • 2012-10-29
      相关资源
      最近更新 更多