Qt中右键菜单的实现主要是通过QContextMenuEvent事件来实现的,如果想要实现自定义的菜单,我们只需要重写该事件!由于该事件为QWidget的一个虚方法,所以继承至QWidget的部件都可以是用该事件来定义自己的右键弹出菜单。
我们接下来实现一个普通的右键菜单:
void Widget::contextMenuEvent(QContextMenuEvent *event)
{
QMenu *menu = new QMenu();
QAction *minimized = new QAction("最小化");
QAction *maximized = new QAction("最大化");
QAction *close = new QAction("关闭");
menu->addAction(minimized);
menu->addAction(maximized);
menu->addAction(close);
connect(minimized,SIGNAL(triggered(bool)),this,SLOT(showMinimized()));
connect(maximized,SIGNAL(triggered(bool)),this,SLOT(showMaximized()));
connect(close,SIGNAL(triggered(bool)),this,SLOT(close()));
menu->exec(QCursor::pos());
}
接下来我们实现一个更为自定义化的弹出菜单:
void Widget::contextMenuEvent(QContextMenuEvent *event)
{
QWidget *w = new QWidget(this);
//指示该窗口是一个弹出窗口
w->setWindowFlags(Qt::flags|Qt::Popup);
QPushButton *btn = new QPushButton(w);
btn->setText("Button");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(btn);
w->setLayout(layout);
w->setFixedWidth(200);
w->show();
connect(btn,SIGNAL(clicked(bool)),this,SLOT(close()));
const QPoint gpt = event->globalPos();
w->move(gpt);
}
看懂了么???是不是很简单,以上的示例只是一个抛砖引玉的作用,想实现什么样的菜单是不是感觉很方便了呢!
有木有觉得Qt想要实现什么样的效果是不是so easy!!!