Qt:在QDockWidget标题上单击鼠标右键

时间:2017-10-30 18:35:57

标签: c++ qt mouseevent qdockwidget

在任何QDockWidget标题上单击鼠标右键会导致应用程序中所有QDockWidget的列表。 要禁用此功能,我实现了特殊标题类

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的菜单。 如何删除此菜单?

1 个答案:

答案 0 :(得分:0)

dock_widget->setContextMenuPolicy(Qt::PreventContextMenu);

来自:How to disable the context menu of a QDockWidget title bar