Qt上下文菜单可检查属性

时间:2015-01-28 12:03:19

标签: qt qt5

我的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);
}

我尝试添加群组操作。其中有默认排除效果。当我选择白色时,黑色支票应该去。反之亦然。 但在我的代码中,始终会检查列表中的黑色菜单。并且在选择白色时,不会检查白色菜单,黑色检查有复选标记。 有人为我提供了解决方案。 我想要更改和切换复选标记。

1 个答案:

答案 0 :(得分:1)

ShowContextMenu广告位中,您始终会创建一个新的菜单对象并检查其黑色'选项。您应该将菜单对象声明为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);
}