当前位置: 首页 > article >正文

2024.10.9 QT事件

1.思维导图

2.一个圆形根据wsad上下左右移动,超出界限则不移动。鼠标点击和双击事件测试。

1.main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

2.mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QKeyEvent>
#include <QtDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void keyPressEvent(QKeyEvent *event)override;
    void mousePressEvent(QMouseEvent *event) override;
     void mouseDoubleClickEvent(QMouseEvent *event) override;



private:
    Ui::MainWindow *ui;
    bool moving;
};
#endif // MAINWINDOW_H

3.mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QKeyEvent>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->label->setFixedSize(50, 50);
    ui->label->setStyleSheet("background-color: red; border-radius: 25px;");
    ui->label->setText("");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    int x = ui->label->x();
    int y = ui->label->y();
    //步长
    int step = 10;
    int labelWidth = ui->label->width();
    int labelHeight = ui->label->height();
    int windowWidth = this->width();
    int windowHeight = this->height();

    switch (event->key()) {
    case 'W':
        if (y > 0) y -= step;
        break;
    case 'S':
        if (y + labelHeight < windowHeight) y += step;
        break;
    case 'A':
        if (x > 0) x -= step;
        break;
    case 'D':
        if (x + labelWidth < windowWidth) x += step;
        break;
    default:;

        return;
    }

    // 更新 QLabel 的位置
    ui->label->move(x, y);
}

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        QPoint pos = event->pos();
        qDebug()<< "鼠标点击坐标:" << pos.x() << ", " << pos.y()  <<endl;
    }
    QMainWindow::mousePressEvent(event);
}

void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        qDebug() << "鼠标双击" << endl;
    }
    QMainWindow::mouseDoubleClickEvent(event);
}


http://www.kler.cn/news/340609.html

相关文章:

  • 科创集团所属园区入驻企业北京铭镓半导体获 “硬科技”潜在独角兽企业认定
  • Matlab线条设置
  • 提示工程、微调和 RAG
  • 【ROS2】geometry_msgs::msg::Twist和sensor_msgs::msg::Joy
  • ssm智能社区管理系统的设计与实现
  • Vue 3 中实现懒加载功能
  • 2020年华为杯数学建模竞赛C题论文和代码
  • 树结构Tree
  • 数据结构——排序(交换排序)
  • LabVIEW激光诱导击穿光谱识别与分析系统
  • Scrum实战中遇到的问题与解决方法
  • 算法工程师重生之第二十四天(买卖股票的最佳时机II 跳跃游戏 跳跃游戏II K次取反后最大化的数组和 )
  • 【C语言系统编程】【第一部分:操作系统知识】1.3.实践与案例分析
  • 5G NR BWP 简介
  • Linux——磁盘分区、挂载
  • 基于深度学习的手术中的增强现实导航
  • 光路科技以技术创新为驱动,打造创新型企业新标杆
  • 从零开始:SpringBoot实现古典舞在线交流平台
  • OJ在线评测系统 微服务高级 Gateway网关接口路由和聚合文档 引入knife4j库集中查看管理并且调试网关项目
  • Linux系统命令:使得指定的linux命令可以在用户注销或终端关闭后继续运行的工具nohup详解