QT菜单栏制作

文章目录

  • 方案一:信号customContextMenuRequested()
  • 方案二:contextMenuEvent()
  • 方案三:重写mousePressEvent()

方案一:信号customContextMenuRequested()

  1. 属性设置
ui.listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
  • Qt::PreventContextMenu:不显示右键菜单。
  • Qt::NoContextMenu:由父对象决定。
  • Qt::DefaultContextMenu:子类重写QWidget::contextMenuEvent()
  • Qt::ActionsContextMenu:将本QWidget的所有QAction作为右键显示的菜单。
  • Qt::CustomContextMenu:通过发信号QWidget::customContextMenuRequested()
  1. 在ui界面右键选择发射信号customContextMenuRequested(QPoint)
  2. 生成对应槽函数void on_listWidget_customContextMenuRequested(const QPoint &pos)
void on_listWidget_customContextMenuRequested(const QPoint &pos)  // pos:相对listwidget的位置
{
	// 获取当前被点击的节点,判断右键位置是否在item的范围内
	if (ui.listWidget->count() < 0 || ui.listWidget->itemAt(pos) == NULL)  // 空白位置右击mapFromGlobal(QCursor::pos())
    {
        return;
    }
	
	// 添加右键菜单选项
    QMenu *menu = new QMenu(this);  // 定义右键弹出菜单
    QAction *action = new QAction("删除", menu);
    menu->addAction(action);  // 添加action
    connect(action, &QAction::triggered, this, &DReportWidget::Delete);
    menu->exec(QCursor::pos());  // 菜单生成位置为光标位置
}

Qt 中Treewidget添加右键菜单

Qt之右键菜单

方案二:contextMenuEvent()

设置contextMenuPolicy为Qt::DefaultContextMenu,然后实现QWidget类的contextMenuEvent接口:

void MyTextEdit::contextMenuEvent(QContextMenuEvent *event)
{
      QMenu *menu = createStandardContextMenu();//默认的标准右键菜单,如果不需要刻意完全自己实现
      menu->addAction(tr("My Menu Item"));
      //...
      menu->exec(event->globalPos());
      delete menu;
}

方案三:重写mousePressEvent()

你可能感兴趣的:(C++\QT,qt,右键菜单)