Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 是否加快contextMenu的初始显示?_Qt - Fatal编程技术网

Qt 是否加快contextMenu的初始显示?

Qt 是否加快contextMenu的初始显示?,qt,Qt,环境:Qt 5.1 OSX 10.7.5 当收到Qt::RightButton事件时,我正在显示一个上下文菜单 问题:它工作正常,只是初始显示非常慢,可能需要3-5秒才能显示菜单。任何后续显示都是即时的。延迟足够长,因此用户可以认为什么都没有发生 问题:是否有办法预加载或加速contextMenu的初始显示 我已尝试在类构造函数中初始化它: contextMenu = new QMenu(this); QAction *saveAction=contextMenu->addAc

环境:Qt 5.1 OSX 10.7.5

当收到
Qt::RightButton
事件时,我正在显示一个上下文菜单

问题:它工作正常,只是初始显示非常慢,可能需要3-5秒才能显示菜单。任何后续显示都是即时的。延迟足够长,因此用户可以认为什么都没有发生

问题:是否有办法预加载或加速contextMenu的初始显示

我已尝试在类构造函数中初始化它:

   contextMenu = new QMenu(this);
   QAction *saveAction=contextMenu->addAction("Save");
   connect(saveAction,SIGNAL(triggered()),this,SLOT(saveSlot()));
我试着将它声明为指针和。。。(不是指针?;-)


这是执行以显示上下文菜单的
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();
        }
    }
}

好的,我通过将Qt Creator中小部件的
contextMenuPolicy
DefaultContextMenu
更改为
ActionsContextMenu
解决了这个问题

我对Qt还不熟悉,所以在这里猜测一下,但也许这使用了Qt上下文菜单而不是OSX菜单?无论如何,它现在立即显示。但是,在某些情况下,它会发出警报:

QNSView mouseDragged: 
Internal mouse button tracking invalid (missing Qt::LeftButton)
不清楚到底发生了什么,但我知道已经发生了可能相关的事情



时间花在哪里?它是在Qt内部还是在你的代码中?@rubenvb-我刚刚用完整的
mousePressEvent
方法更新了我的问题。除了可能会使事情变慢的“设置焦点”之外,似乎没有其他东西。
QNSView mouseDragged: 
Internal mouse button tracking invalid (missing Qt::LeftButton)