Qt 上下文菜单可检查 属性
Qt-context menu checkable property
我的 UI 中有一个上下文菜单选项。它有白色和黑色的主题。
void MainWindow::ShowContextMenu(const QPoint& pos)
{
QPoint globalPos = this->mapToGlobal(pos);
white=new QAction("White", this);
black=new QAction("Black", this);
QMenu myMenu;
theme=myMenu.addMenu(tr("&Theme"));
theme->addAction(white);
theme->addAction(black);
white->setCheckable(true);
black->setCheckable(true);
QActionGroup *grp= new QActionGroup(this);
grp->addAction(white);
grp->addAction(black);
black->setChecked(true);
grp->setExclusive(true);
QAction* selectedItem = myMenu.exec(globalPos);
}
我尝试添加群组操作。其中默认排除效果。当我 select 白色时,黑色检查应该消失。反之亦然。
但是在我的代码中,列表中的黑色菜单总是被选中。在 selecting 白色上,白色菜单未被选中,黑色选中有复选标记。
有人为此提供了解决方案。
我希望复选标记应该被更改和切换。
在您的 ShowContextMenu
插槽中,您总是创建一个新的菜单对象并检查其 'black' 选项。您应该将菜单对象声明为 MainWindow
成员并仅初始化一次:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
myMenu(0), white(0), black(0)
{
...
}
void Widget::initMenu()
{
white=new QAction("White", this);
black=new QAction("Black", this);
myMenu = new QMenu(this);
QMenu *theme= myMenu->addMenu(tr("&Theme"));
theme->addAction(white);
theme->addAction(black);
white->setCheckable(true);
black->setCheckable(true);
QActionGroup *grp= new QActionGroup(this);
grp->addAction(white);
grp->addAction(black);
black->setChecked(true);
grp->setExclusive(true);
}
void Widget::ShowContextMenu(const QPoint& pos)
{
if (!myMenu)
{
initMenu();
}
QPoint globalPos = this->mapToGlobal(pos);
QAction* selectedItem = myMenu->exec(globalPos);
}
我的 UI 中有一个上下文菜单选项。它有白色和黑色的主题。
void MainWindow::ShowContextMenu(const QPoint& pos)
{
QPoint globalPos = this->mapToGlobal(pos);
white=new QAction("White", this);
black=new QAction("Black", this);
QMenu myMenu;
theme=myMenu.addMenu(tr("&Theme"));
theme->addAction(white);
theme->addAction(black);
white->setCheckable(true);
black->setCheckable(true);
QActionGroup *grp= new QActionGroup(this);
grp->addAction(white);
grp->addAction(black);
black->setChecked(true);
grp->setExclusive(true);
QAction* selectedItem = myMenu.exec(globalPos);
}
我尝试添加群组操作。其中默认排除效果。当我 select 白色时,黑色检查应该消失。反之亦然。 但是在我的代码中,列表中的黑色菜单总是被选中。在 selecting 白色上,白色菜单未被选中,黑色选中有复选标记。 有人为此提供了解决方案。 我希望复选标记应该被更改和切换。
在您的 ShowContextMenu
插槽中,您总是创建一个新的菜单对象并检查其 'black' 选项。您应该将菜单对象声明为 MainWindow
成员并仅初始化一次:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
myMenu(0), white(0), black(0)
{
...
}
void Widget::initMenu()
{
white=new QAction("White", this);
black=new QAction("Black", this);
myMenu = new QMenu(this);
QMenu *theme= myMenu->addMenu(tr("&Theme"));
theme->addAction(white);
theme->addAction(black);
white->setCheckable(true);
black->setCheckable(true);
QActionGroup *grp= new QActionGroup(this);
grp->addAction(white);
grp->addAction(black);
black->setChecked(true);
grp->setExclusive(true);
}
void Widget::ShowContextMenu(const QPoint& pos)
{
if (!myMenu)
{
initMenu();
}
QPoint globalPos = this->mapToGlobal(pos);
QAction* selectedItem = myMenu->exec(globalPos);
}