使用C++和QT,在MainWindow.cpp中完成一个在widget中点击鼠标返回坐标的功能代码
时间: 2024-02-01 09:15:15 浏览: 64
可以在`MainWindow.cpp`中的`mousePressEvent`函数中完成这个功能。具体代码如下:
```c++
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton) // 判断是否是左键单击
{
QPoint pos = event->pos(); // 获取鼠标单击位置
qDebug() << "x:" << pos.x() << ", y:" << pos.y(); // 输出坐标
}
}
```
在这段代码中,`if`语句用于判断是否是左键单击,如果是,则通过`QMouseEvent`对象的`pos`函数获取鼠标单击的位置,然后通过`qDebug`输出该位置的`x`和`y`坐标。
相关问题
使用C++和QT,只在MainWindow.cpp中增加代码,完成一个在widget中点击鼠标返回坐标的功能
可以在MainWindow.cpp中的构造函数里面添加以下代码:
```c++
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setCentralWidget(new QWidget(this)); // 设置中央窗口部件为一个QWidget
centralWidget()->setMouseTracking(true); // 启用鼠标跟踪,这样鼠标移动时也会触发事件
centralWidget()->setFixedSize(400, 300); // 设定中央窗口部件大小
connect(centralWidget(), &QWidget::mousePressEvent, this, &MainWindow::mousePressEvent); // 连接鼠标点击事件和自定义的槽函数
}
```
然后再在MainWindow类中添加以下槽函数:
```c++
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) { // 如果是左键点击
QPoint pos = event->pos(); // 获取鼠标点击位置
qDebug() << "X:" << pos.x() << ", Y:" << pos.y(); // 输出坐标信息
}
}
```
以上代码通过连接中央窗口部件的鼠标点击事件和自定义的槽函数,实现了在widget中点击鼠标返回坐标的功能。当鼠标左键点击时,会在控制台输出坐标信息。你可以根据自己的需求修改输出方式。
使用C++和QT,只在MainWindow.cpp中增加代码,完成一个在ui文件中事先设置好的widget中点击鼠标返回坐标的功能
可以使用Qt中的事件过滤器来实现这个功能,以下是示例代码:
在MainWindow.cpp中的构造函数中添加以下代码:
```c++
ui->widget->installEventFilter(this);
```
这里的ui->widget是在ui文件中设置好的widget,我们需要给它安装事件过滤器,让它能够捕获鼠标事件。
然后在MainWindow.cpp中添加以下函数:
```c++
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->widget && event->type() == QEvent::MouseButtonPress) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
qDebug() << "x:" << mouseEvent->x() << "y:" << mouseEvent->y();
return true;
}
return false;
}
```
这个函数会捕获ui->widget中的鼠标事件,如果是鼠标按下事件,则获取鼠标的x和y坐标,并输出到控制台中。
最后,在MainWindow.h文件中添加以下声明:
```c++
protected:
bool eventFilter(QObject *obj, QEvent *event);
```
这里是为了让编译器知道我们已经定义了一个名为eventFilter的函数,并且它是一个事件过滤器。
这样就完成了在ui文件中设置好的widget中点击鼠标返回坐标的功能。
阅读全文