C++ 未调用mouseReleaseEvent
我试图实现一种方法,在按下SVG按钮时更改背景,在释放SVG按钮时重置背景。我的问题是,当我隐藏调用MousePresseEvent的QSvgWidget时,mouseReleaseEvent没有被调用 这是我的密码: SvgButton.cpp 和C++ 未调用mouseReleaseEvent,c++,qt,svg,C++,Qt,Svg,我试图实现一种方法,在按下SVG按钮时更改背景,在释放SVG按钮时重置背景。我的问题是,当我隐藏调用MousePresseEvent的QSvgWidget时,mouseReleaseEvent没有被调用 这是我的密码: SvgButton.cpp 和BaseNavigationButton.cpp #include "BaseNavigationButton.h" const int kButtonWidth = 140; const int kButtonHeight = 70; Base
BaseNavigationButton.cpp
#include "BaseNavigationButton.h"
const int kButtonWidth = 140;
const int kButtonHeight = 70;
BaseNavigationButton::BaseNavigationButton(QString backgroundImagePath, QString pressedBackgroundImagePath, QWidget *parent)
: SVGButton(backgroundImagePath, parent)
{
this->setMinimumSize(kButtonWidth, kButtonHeight);
if (!pressedBackgroundImagePath.isNull())
{
SVGDom pressedBackgroundImage(pressedBackgroundImagePath);
_pressedBackgroundImageWidget = new QSvgWidget();
_pressedBackgroundImageWidget->load(pressedBackgroundImage.byteArray());
layout()->addWidget(_pressedBackgroundImageWidget);
_pressedBackgroundImageWidget->hide();
}
else
{
_pressedBackgroundImageWidget = NULL;
}
}
void BaseNavigationButton::mouseReleaseEvent(QMouseEvent * event)
{
qDebug() << "SVGButton::mouseReleaseEvent";
if (_pressedBackgroundImageWidget) {
_backgroundImageWidget->setVisible(false);
_pressedBackgroundImageWidget->setVisible(true);
//_backgroundImageWidget->show();
//_pressedBackgroundImageWidget->hide();
}
QPushButton::mouseReleaseEvent(event);
//emit released();
}
void BaseNavigationButton::mousePressEvent(QMouseEvent *event)
{
qDebug() << "SVGButton::mousePressEvent";
if(_pressedBackgroundImageWidget)
{
_backgroundImageWidget->setVisible(true);
_pressedBackgroundImageWidget->setVisible(false);
}
QPushButton::mousePressEvent(event);
// emit pressed();
}
BaseNavigationButton::~BaseNavigationButton()
{
if (_pressedBackgroundImageWidget)
{
delete _pressedBackgroundImageWidget;
}
}
#包括“BaseNavigationButton.h”
常量int kButtonWidth=140;
常数int kButtonHeight=70;
BaseNavigationButton::BaseNavigationButton(QString backgroundImagePath、QString pressedBackgroundImagePath、QWidget*parent)
:SVG按钮(backgroundImagePath,父级)
{
此->设置最小尺寸(kButtonWidth、kButtonHeight);
如果(!pressedBackgroundImagePath.isNull())
{
SVGDom pressedBackgroundImage(pressedBackgroundImagePath);
_按BackgroundImageWidget=new QSvgWidget();
_按BackgroundImageWidget->load(按BackgroundImageByteArray());
layout()->addWidget(_pressedBackgroundImageWidget);
_按BackgroundImageWidget->hide();
}
其他的
{
_按BackgroundImageWidget=NULL;
}
}
void BaseNavigationButton::mouseReleaseEvent(QMouseEvent*事件)
{
qDebug()setVisible(false);
_按BackgroundImageWidget->setVisible(true);
//_backgroundImageWidget->show();
//_按BackgroundImageWidget->hide();
}
QPushButton::mouseReleaseEvent(事件);
//释放();
}
void BaseNavigationButton::MousePresseEvent(QMouseEvent*事件)
{
qDebug()setVisible(true);
_按BackgroundImageWidget->setVisible(假);
}
QPushButton::MousePresseEvent(事件);
//按下发射();
}
BaseNavigationButton::~BaseNavigationButton()
{
如果(按BackgroundImageWidget)
{
删除按BackgroundImageWidget;
}
}
SVGDom基本上只是从SVG图像创建一个ByteArray。代码是有效的,它是相对正确的,唯一的问题是我上面描述的。当你隐藏一个
QWidget
时,它会失去焦点,而一个小部件——或者一些子小部件——必须有焦点才能使事件在其上工作
试试这个简单的例子:
clicked
是一个mousePressEvent
,后跟一个mouseereleaseEvent
--事件
因此,无法从隐藏对象接收鼠标按钮事件
如何实现“鼠标按下”式行为?
如果“鼠标按下样式行为”的意思是:“当我按下鼠标按钮时,我希望我的小部件样式改变”
您可以使用
setStyleSheet
函数将CSS样式应用到小部件中。请参见谢谢您的解释和您的时间(+1),我已经解决了这个问题,只是我认为有一些解决办法。我能做些什么来实现“鼠标按下”式行为?@flatronka我在回答中添加了几行,再次检查。
#include "BaseNavigationButton.h"
const int kButtonWidth = 140;
const int kButtonHeight = 70;
BaseNavigationButton::BaseNavigationButton(QString backgroundImagePath, QString pressedBackgroundImagePath, QWidget *parent)
: SVGButton(backgroundImagePath, parent)
{
this->setMinimumSize(kButtonWidth, kButtonHeight);
if (!pressedBackgroundImagePath.isNull())
{
SVGDom pressedBackgroundImage(pressedBackgroundImagePath);
_pressedBackgroundImageWidget = new QSvgWidget();
_pressedBackgroundImageWidget->load(pressedBackgroundImage.byteArray());
layout()->addWidget(_pressedBackgroundImageWidget);
_pressedBackgroundImageWidget->hide();
}
else
{
_pressedBackgroundImageWidget = NULL;
}
}
void BaseNavigationButton::mouseReleaseEvent(QMouseEvent * event)
{
qDebug() << "SVGButton::mouseReleaseEvent";
if (_pressedBackgroundImageWidget) {
_backgroundImageWidget->setVisible(false);
_pressedBackgroundImageWidget->setVisible(true);
//_backgroundImageWidget->show();
//_pressedBackgroundImageWidget->hide();
}
QPushButton::mouseReleaseEvent(event);
//emit released();
}
void BaseNavigationButton::mousePressEvent(QMouseEvent *event)
{
qDebug() << "SVGButton::mousePressEvent";
if(_pressedBackgroundImageWidget)
{
_backgroundImageWidget->setVisible(true);
_pressedBackgroundImageWidget->setVisible(false);
}
QPushButton::mousePressEvent(event);
// emit pressed();
}
BaseNavigationButton::~BaseNavigationButton()
{
if (_pressedBackgroundImageWidget)
{
delete _pressedBackgroundImageWidget;
}
}