请问QT中如何实现右击菜单。
我想在QT做的播放窗口中,右键单击,弹出一个菜单,应该怎么实现呢?谢谢。
QMenu* contextMenu = new QMenu(this);
contextMenu->addAction(tr("**"), parent(), SLOT(**()));
contextMenu->addSeparator();
contextMenu->addAction(tr("***"), parent(), SLOT(***()));
contextMenu->exec(QCursor::pos());
delete contextMenu;
那怎么判断是在播放窗口呢,还是在其他位置上,右击菜单呢?怎么判断是在播放窗口还是在其他位置上?谢谢。
xxxWidget->setContextMenuPolicy (Qt::CustomContextMenu);
connect(xxxWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(xxx(QPoint));
楼上的,这样,我试了一下,好像不行的啊。在SLOT(xxx(QPoint)的callback函数里,应该做些什么工作?
在Slot里把我二楼回复的内容放进去
引用 5 楼 vickylh 的回复:
在Slot里把我二楼回复的内容放进去
这样做,不行的。我的代码:
QWidget * m_pVideoWindow = new QWidget(this);
m_pVideoWindow->setStyleSheet("background-color:rgb(0, 0, 0);");
m_pVideoWindow->setMinimumSize(352, 288);
m_pVideoWindow->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_pVideoWindow, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenu(QPoint)));
void MainWindow::contextMenu(QPoint * point)
{
QMenu* contextMenu = new QMenu(this);
contextMenu->addAction(tr("Play/Pause"), parent(), SLOT(playorpause_callback()));
contextMenu->addSeparator();
contextMenu->addAction(tr("Stop"), parent(), SLOT(stop_callback()));
contextMenu->exec(QCursor::pos());
delete contextMenu;
}
这个我有实现过...
当时我是在播放面板(也就是显示视频的那个)上重载了contextMenuEvent(QContextMenuEvent *event)函数
如果其他地方的右键菜单不一样的话,你可以重载相应部分的contextMenuEvent(QContextMenuEvent *event)函数
右键菜单的创建方法上面有说了,我以前也有写了一个样例:
http://blog.csdn.net/killua_hzl/archive/2010/02/04/5288782.aspx
写得很搓别BS哈
已经好了,修改一下两行:
connect(m_pVideoWindow, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &)));
void MainWindow::contextMenu(const QPoint &point)
就可以解决了。
http://topic.csdn.net/u/20100520/14/4c09edb6-a109-4134-8388-5f4c9402657f.html
我想在QT做的播放窗口中,右键单击,弹出一个菜单,应该怎么实现呢?谢谢。
QMenu* contextMenu = new QMenu(this);
contextMenu->addAction(tr("**"), parent(), SLOT(**()));
contextMenu->addSeparator();
contextMenu->addAction(tr("***"), parent(), SLOT(***()));
contextMenu->exec(QCursor::pos());
delete contextMenu;
那怎么判断是在播放窗口呢,还是在其他位置上,右击菜单呢?怎么判断是在播放窗口还是在其他位置上?谢谢。
xxxWidget->setContextMenuPolicy (Qt::CustomContextMenu);
connect(xxxWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(xxx(QPoint));
楼上的,这样,我试了一下,好像不行的啊。在SLOT(xxx(QPoint)的callback函数里,应该做些什么工作?
在Slot里把我二楼回复的内容放进去
引用 5 楼 vickylh 的回复:
在Slot里把我二楼回复的内容放进去
这样做,不行的。我的代码:
QWidget * m_pVideoWindow = new QWidget(this);
m_pVideoWindow->setStyleSheet("background-color:rgb(0, 0, 0);");
m_pVideoWindow->setMinimumSize(352, 288);
m_pVideoWindow->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_pVideoWindow, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenu(QPoint)));
void MainWindow::contextMenu(QPoint * point)
{
QMenu* contextMenu = new QMenu(this);
contextMenu->addAction(tr("Play/Pause"), parent(), SLOT(playorpause_callback()));
contextMenu->addSeparator();
contextMenu->addAction(tr("Stop"), parent(), SLOT(stop_callback()));
contextMenu->exec(QCursor::pos());
delete contextMenu;
}
这个我有实现过...
当时我是在播放面板(也就是显示视频的那个)上重载了contextMenuEvent(QContextMenuEvent *event)函数
如果其他地方的右键菜单不一样的话,你可以重载相应部分的contextMenuEvent(QContextMenuEvent *event)函数
右键菜单的创建方法上面有说了,我以前也有写了一个样例:
http://blog.csdn.net/killua_hzl/archive/2010/02/04/5288782.aspx
写得很搓别BS哈
已经好了,修改一下两行:
connect(m_pVideoWindow, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &)));
void MainWindow::contextMenu(const QPoint &point)
就可以解决了。
http://topic.csdn.net/u/20100520/14/4c09edb6-a109-4134-8388-5f4c9402657f.html