qt右键菜单用法
时间: 2023-07-12 18:09:10 浏览: 98
在Qt中,右键菜单通常用于对控件进行操作和显示上下文相关的菜单。下面演示一下如何在一个QTreeView控件上添加右键菜单:
1. 在要添加右键菜单的QWidget控件类中,添加一个私有成员变量QMenu *m_menu。
2. 在QWidget的构造函数中,创建QMenu对象,并添加QAction动作,将QAction添加到QMenu中。
```cpp
m_menu = new QMenu(this); // 创建QMenu对象
QAction *action1 = new QAction("Action1", this);
QAction *action2 = new QAction("Action2", this);
connect(action1, &QAction::triggered, this, &MyWidget::onAction1Triggered);
connect(action2, &QAction::triggered, this, &MyWidget::onAction2Triggered);
m_menu->addAction(action1); // 添加QAction到QMenu中
m_menu->addAction(action2);
```
3. 重写QWidget的contextMenuEvent事件函数,在其中获取鼠标坐标,并在该位置显示QMenu菜单。
```cpp
void MyWidget::contextMenuEvent(QContextMenuEvent *event)
{
m_menu->exec(event->globalPos()); // 在鼠标位置显示QMenu菜单
}
```
4. 处理QAction动作对应的槽函数。
```cpp
void MyWidget::onAction1Triggered()
{
// 处理Action1动作
}
void MyWidget::onAction2Triggered()
{
// 处理Action2动作
}
```
完整示例代码如下:
```cpp
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
m_menu = new QMenu(this); // 创建QMenu对象
QAction *action1 = new QAction("Action1", this);
QAction *action2 = new QAction("Action2", this);
connect(action1, &QAction::triggered, this, &MyWidget::onAction1Triggered);
connect(action2, &QAction::triggered, this, &MyWidget::onAction2Triggered);
m_menu->addAction(action1); // 添加QAction到QMenu中
m_menu->addAction(action2);
}
protected:
void contextMenuEvent(QContextMenuEvent *event) override
{
m_menu->exec(event->globalPos()); // 在鼠标位置显示QMenu菜单
}
private slots:
void onAction1Triggered()
{
// 处理Action1动作
}
void onAction2Triggered()
{
// 处理Action2动作
}
private:
QMenu *m_menu;
};
```
阅读全文