1

在我的应用程序中,用户可以从所有可用组件的列表中选择一个组件。这将在一个填充有 QAction 小部件的菜单中完成。但是,当前代码并没有显示选择了哪个端口,为了让应用程序更直观,我想指出选择了哪个端口,从而向用户显示程序处于什么状态。通过包含某种排序选择端口旁边的菜单中的图标(例如复选标记),很明显选择了哪个端口。这样做的正确方法是什么?

我的代码:

# Populate the serial port menu with all the available ports.
for port in comports(): 
    _port = QtWidgets.QAction(port[0], mainWindow)
    _port.setCheckable(True)   # WRONG!
    self.menuChoose_port.addAction(_port)
    _port.triggered.connect(self.comportSelect)

这段代码显然没有做我想要的,因为它在每个菜单项旁边放置了复选框。此外,它允许用户一次检查多个组件,这根本不是可取的。

需要复选标记,而不是复选框

4

1 回答 1

0

迟到今年,在 C++ 中,但如果有人下线到达这里,这就是我所做的(免责声明:这有点像黑客):

  1. 保留对当前选定操作的引用
  2. 选中后,将选中项的选中和可检查标志设置为 true。
  3. 选择更改后,从所选操作中删除检查,并更新参考

这似乎允许检查项目,但一次只能检查一项。此解决方案实际上仅适用于尝试维护单个选择。

// in the header:
QAction *selectedAction = nullptr;

// in the cpp file
QAction *act = new QAction("exampleItem");

connect(act, &QAction::triggered, [this, act] {
  if (selectedAction != nullptr) {
    selectedAction->setChecked(false);
    selectedAction->setCheckable(false);
  }
  act->setCheckable(true);
  act->setChecked(true);
  selectedAction = newAction;
})

menu->addAction(act);
于 2020-06-04T00:14:27.693 回答