Qt::ContextMenuPolicy属性(widget添加右键目录)

环境:win10,vs2017,qt5.9.7。本文以QTextEdit为例,实现右键暂停刷新和清空内容的两个目录。

首先需要在Mainwindow构造函数时初始化QTextEdit的属性ContextMenuPolicy,

    ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->textEdit,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(ShowTextEditMenu(QPoint)));

当有右键点击事件时,会发送QWidget::customContextMenuRequested()信号,所以我们再将此信号关联到一个槽函数,在槽函数中实现目录内容。

void MainWindow::ShowTextEditMenu(QPoint)
{
    QMenu *texteditmenu = new QMenu(ui->textEdit);
    QAction *stopaction=nullptr;
    if(mbTextEditShow)
    {
        stopaction = new QAction(g_C2Q("暂停刷新"),ui->textEdit);
    }
    else
    {
        stopaction = new QAction(g_C2Q("恢复刷新"),ui->textEdit);
    }
    connect(stopaction,SIGNAL(triggered()),this,SLOT(on_StopClearBtn_clicked()));
    QAction *clearaction = new QAction(g_C2Q("清空报文"),ui->textEdit);
    connect(clearaction,SIGNAL(triggered()),this,SLOT(on_ClearBtn_clicked()));
    texteditmenu->addAction(stopaction);
    texteditmenu->addAction(clearaction);
    texteditmenu->move (cursor ().pos ());
    texteditmenu->show();
}

ShowTextEditMenu函数中new一个QMenu对象texteditmenu,然后新建两个动作stopaction和clearaction,分别通过connect函数关联相应的处理函数,再将两个动作添加到texteditmenu中,当右键点击后会弹出目录。效果图如下。

Qt::ContextMenuPolicy属性(widget添加右键目录)_第1张图片

 注意:此处用到move函数,将显示的texteditmenu定位到光标当前位置,否则会每次出现在屏幕左上角(0,0)位置。

你可能感兴趣的:(QT5问题及解决方法)