【问题标题】:Qt: right mouse click handling on QDockWidget titleQt:在 QDockWidget 标题上的鼠标右键单击处理
【发布时间】:2017-10-31 19:28:27
【问题描述】:

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

【问题讨论】:

  • 尝试:(父级,Qt::Window | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint)

标签: c++ qt mouseevent qdockwidget


【解决方案1】:

dock_widget->setContextMenuPolicy(Qt::PreventContextMenu);

发件人:How to disable the context menu of a QDockWidget title bar

【讨论】:

  • 谢谢!我很难找到分析器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
相关资源
最近更新 更多