我正在考虑一些关于标题的问题因为我有一个问题如何命名。我在Qt和C ++编程,我可以使用清晰的基本结构。现在我想做一些更有效的事情,但我不知道什么是最好的解决方案。所以我在主窗口中有一个图像。我该如何解决这个问题:
如果我将鼠标光标移动到图像的特定区域,则程序应在该区域周围绘制黄色框。如果我将鼠标移动到此图像的其他部分,则此帧应该消失。在伪代码中:
if(mouse_X >= 100 && mouse_X <=150 &&
mouse_Y >= 250 && mouse_Y <= 300)
drawFrame();
有什么建议吗?
答案 0 :(得分:0)
有很多方法可以解决这个问题。
其中一个可能是使用事件过滤器作为问题中所述的@nwp。但是,还需要跟踪图像中的鼠标移动。
我不知道你是如何加载图片的,所以下一个代码只是一个例子,假设你在QLabel
加载图像。你必须使这个想法适应你自己的项目。
<强>的main.cpp 强>
#include "mywindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWindow myWindow;
myWindow.show();
return app.exec();
}
<强> mywindow.h 强>
#ifndef _MAINWINDOW_H
#define _MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QDebug>
class MyWindow: public QWidget {
Q_OBJECT
public:
MyWindow();
~MyWindow();
bool eventFilter(QObject *object, QEvent *event);
private:
QLabel *imageLabel;
};
#endif
<强> mywindow.cpp 强>
#include "mywindow.h"
#include <QPixmap>
#include <QEvent>
#include <QMouseEvent>
MyWindow::MyWindow()
{
imageLabel = new QLabel(this);
imageLabel->setPixmap(QPixmap(":icon"));
imageLabel->resize(imageLabel->pixmap()->size());
qDebug() << imageLabel->pixmap()->size();
imageLabel->setMouseTracking(true);
imageLabel->installEventFilter(this);
}
MyWindow::~MyWindow()
{
}
bool MyWindow::eventFilter(QObject *object, QEvent *event)
{
if (object == imageLabel && event->type() == QEvent::MouseMove) {
/*
* We know the image is 60x60 px.
*/
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if(mouseEvent->x() >= 0 && mouseEvent->x() <=30 &&
mouseEvent->y() >= 0 && mouseEvent->y() <= 30)
{
qDebug() << "drawFrame()";
} else {
qDebug() << "!drawFrame()";
}
return false;
}
return false;
}