环境:Qt 5.1 OSX 10.7.5
我收到Qt::RightButton
事件时会显示contextMenu。
问题:除了初始显示非常慢并且显示菜单需要3-5秒之外,它工作正常。任何后续显示都是立即的。延迟时间足够长,以便用户可以认为没有发生任何事情。
问题:有没有办法预加载或以其他方式加快contextMenu的初始显示?
我尝试在我的类构造函数中初始化它:
contextMenu = new QMenu(this);
QAction *saveAction=contextMenu->addAction("Save");
connect(saveAction,SIGNAL(triggered()),this,SLOT(saveSlot()));
我已经尝试将其声明为指针和...(不是指针?; - )
QMenu *contextMenu;
这是执行以显示contextMenu的mousePressEvent
。
void RPImageLabel::mousePressEvent(QMouseEvent *event)
{
if (!imageRect.contains(event->pos())) return;
origin = event->pos();
this->setFocus();
if (event->button()==Qt::RightButton){
if (selectionRect.contains(origin))
// contextMenu.exec(this->mapToGlobal(origin));
contextMenu->exec(this->mapToGlobal(origin));
} else {
selectionStarted=true;
selectionRect.setTopLeft(origin);
selectionRect.setBottomRight(origin);
if (rubberBand->isHidden()){
rubberBand->setGeometry(QRect(origin, origin));
rubberBand->show();
repaint();
}
}
}
答案 0 :(得分:0)
好的,我通过在Qt Creator中将contextMenuPolicy
从DefaultContextMenu
更改为ActionsContextMenu
来解决此问题。
我是Qt的新手所以只是在这里猜测,但也许这会使用Qt contextMenu而不是OSX菜单?无论如何,它现在立即显示。但它会在某些条件下发出警报:
QNSView mouseDragged:
Internal mouse button tracking invalid (missing Qt::LeftButton)
不清楚发生了什么,但我发现a bug report filed可能与此有关。