gpt4 book ai didi

qt - Qt程序在右键单击时崩溃

转载 作者:行者123 更新时间:2023-12-03 16:02:04 24 4
gpt4 key购买 nike

我正在为大学项目的视频编辑器工作。 guiVideoElement(黑色区域)是guiVideoTrack(浅灰色区域)上视频 Material 的图形表示。使用Shift +鼠标左键,您可以在guiVideoElement上进行选择(蓝色区域)。要进行选择,可以通过右键单击所选区域来打开上下文菜单。

this tutorial中所建议,我使用contextMenuEvent打开上下文菜单。不幸的是,除非我也定义了mousePressEvent,否则整个程序都会崩溃,并显示消息“程序已意外完成。”。即使mousePressEvent方法为空,这也会有所帮助(请参见下文)。

这是我的选择代码:

#include "guiselection.h"

#include <QMouseEvent>
#include <QMenu>
#include <QDebug>

GuiSelection::GuiSelection(QWidget *parent, int pos) :
QLabel(parent)
{
this->setFixedSize(1,60);
this->setScaledContents(true);
this->setPixmap(QPixmap(":/track/gui_selection"));

this->move(pos, this->pos().y());
this->show();
}

void GuiSelection::contextMenuEvent(QContextMenuEvent *ev)
{
QMenu menu(this);

exampleAct = new QAction(tr("&cut"), this);
connect(exampleAct, SIGNAL(triggered()), this, SLOT(doSth()));
menu.addAction(exampleAct);

menu.exec(ev->globalPos());
}

void GuiSelection::doSth()
{
qDebug() << "do sth executed";
}

void GuiSelection::mousePressEvent(QMouseEvent *ev) { }

在guiVideoElement本身上处理mousePressEvents时,在GuiSelection类中引入鼠标按钮处理之前,我有相同的行为。在注释掉GuiSelection中的contextMenuEvent和mousePressEvent函数时执行以下代码,将在打印“单击右键”和parentWidget-> width()之后使程序崩溃。即在执行mousePressEvent函数中的所有代码后,程序崩溃。
#include "guivideoelement.h"
#include "tracks/videoelement.h"
#include "uitracks/guiselection.h"
#include "uitracks/guivideotrack.h"

#include <QPixmap>
#include <QMouseEvent>
#include <QKeyEvent>
#include <QApplication>

#include <QDebug>

GuiVideoElement::GuiVideoElement(GuiVideoTrack *parent, VideoElement *ve, int length) :
GuiTrackElement(parent)
{
...
}

void GuiVideoElement::mousePressEvent(QMouseEvent *ev)
{
if(guiSelection != NULL) {
delete guiSelection;
guiSelection = NULL;
}

if(ev->button() & Qt::LeftButton && QApplication::keyboardModifiers() & Qt::ShiftModifier)
{
guiSelection = new GuiSelection(this, ev->pos().x());
} else if(ev->button() & Qt::RightButton)
{
qDebug() << "right button clicked";
}
else {
lastX = this->pos().x();
lastStableX = this->pos().x();

// for exact distinction of position us global positions!
prevMousePos = mapFromGlobal(ev->globalPos()).x();
}
qDebug() << parentWidget->width();
}

void GuiVideoElement::mouseMoveEvent(QMouseEvent *ev)
{
...
}

...

知道我在做什么错吗?我正在运行Ubuntu 11.04。其他运行Windows的团队成员告诉我,该程序不会对他们造成崩溃,在左侧或右侧单击该选项后,所选内容就会消失。对我来说,当我左键单击选择项时,什么也没有发生。

最佳答案

我的一个队友发现

guiSelection->deleteLater();

代替
delete guiSelection;

解决了问题。 Qt文档也指向该方向(例如,参见 herehere)。

关于qt - Qt程序在右键单击时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com