切换按钮时如何显示/隐藏复选框?

时间:2020-08-30 19:08:14

标签: qt qt-designer

我启动了Qt Designer来为Maya工具创建一个窗口。 我正在制作与Blender Snap相同的GUI。我该如何更改显示? Qt中为每个按钮显示不同的按钮是什么?

In Increment Absolute Grid Snap only In Face more menu making

1 个答案:

答案 0 :(得分:0)

我能想到的两个选择

Layouts

1。使用StackedWidget(左)

StackedWidget是一个包含多个小部件的容器,但一次仅显示一个。您可以使用.setCurrentIndex(int index).setCurrentWidget(QWidget*)设置哪一个可见。

这基本上是您要执行的操作,除了默认情况下,它会保持与最高的小部件一样高,即使有间隔(在屏幕截图中也可以看到)。

可以手动强制执行此操作,或者甚至可以创建自己的窗口小部件来执行此操作(https://www.qtcentre.org/threads/28514-How-can-i-achieve-an-auto-resizing-QStackedWidget),但是它的易用性有所降低。

2。小部件,隐藏/显示,分隔符(右)

第二个选项(实际上是最基本的)是创建用作容器的不同Widget,并且每当按下按钮时都将切换(.show() / .hide)。如果您正在寻找实现它的最简单方法,甚至可以从QtCreator的设计器中完成。

  • 使按钮checkableexclusive(可能与您一样)
  • 连接到clicked(bool checked)toggled(bool checked)信号
  • 调用容器小部件上的show / hide仅显示一个。瞧!
MyWidget:MyWidget(...)
{  
  connect(ui->vertexButton, &QPushButton::clicked, this, &MyWidget::onButtonClicked);
}

void MyWidget::onButtonClicked(bool checked) {
  button = sender();
  if (button == ui->vertexButton) {
    ui->vertexContent->show();
    ui->edgeContent->hide();
  } else if ...
}

免责声明:我没有尝试编译上面的代码