Qt:鼠标右键单击处理 QDockWidget 标题

Qt: right mouse click handling on QDockWidget title

在任何 QDockWidget 标题上单击鼠标右键会列出应用程序中的所有 QDockWidget。 为了禁用此行为,我实施了特殊标题 class

class QMyTitleBar : public QLabel
{
public:
    QMyTitleBar(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()) : QLabel(parent, f)
    {
    }

    QMyTitleBar(const QString &text, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()) : QLabel(text, parent, f)
    {
    }

    ~QMyTitleBar()
    {
    }

protected:
    void mouseReleaseEvent(QMouseEvent * qevent) override
{
    if (qevent->button() == Qt::MouseButton::RightButton)
    {
        qevent->accept();
        return;
    }
}

void mousePressEvent(QMouseEvent * qevent) override
{
    if (qevent->button() == Qt::MouseButton::RightButton)
    {
        qevent->accept();
        return;
    }
}

并将此自定义标题小部件设置为我的 QDockWidget

myDockWidget->setTitleBarWidget(new QMyTitleBar(QObject::tr("My Title")));

但这不起作用。它处理鼠标事件,但会出现包含所有 QDockWidgets 的菜单。 我怎样才能删除这个菜单?

dock_widget->setContextMenuPolicy(Qt::PreventContextMenu);

发件人: