两个区域一个widget,一个scene mousePressEvent怎么写 C++
时间: 2024-03-04 19:48:58 浏览: 88
下面是在 C++ 中实现两个区域一个 widget,一个 scene 的 mousePressEvent 的示例代码:
```cpp
#include <QApplication>
#include <QWidget>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QMouseEvent>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void mousePressEvent(QMouseEvent *event) override
{
qDebug() << "Widget clicked!";
}
};
class MyScene : public QGraphicsScene
{
public:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
{
qDebug() << "Scene clicked!";
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
QGraphicsView view(new MyScene);
widget.show();
view.show();
return app.exec();
}
```
在这个示例代码中,我们定义了 MyWidget 和 MyScene 两个类来分别实现 Widget 和 Scene 的鼠标点击事件处理函数。在 MyWidget 的 mousePressEvent 函数中,当 Widget 被点击时,会输出 "Widget clicked!";在 MyScene 的 mousePressEvent 函数中,当 Scene 被点击时,会输出 "Scene clicked!"。我们在 main 函数中创建了 widget 和 view,并将 view 设置为 MyScene 的 QGraphicsView,这样就可以将 Scene 显示在 view 中了。
注意,在 C++ 中,我们需要使用 override 关键字来重写基类中的虚函数,这样可以帮助我们编写更加严谨的代码。另外,需要在 MyScene 的 mousePressEvent 函数中使用 QGraphicsSceneMouseEvent 类,这是因为 QGraphicsScene 中的鼠标事件处理函数需要传入 QGraphicsSceneMouseEvent 类型的参数。
阅读全文