Qt鼠标事件

.h

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void mousePressEvent(QMouseEvent* e);//鼠标按下
    void mouseMoveEvent(QMouseEvent* e);//移动
    void mouseReleaseEvent(QMouseEvent* e);//释放

private:
    Ui::MainWindow *ui;

    QLabel* m_startLabel;//开始位置
    QLabel* m_posLabel;//当前位置
};

.cpp

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

    setWindowTitle("鼠标事件");

    m_startLabel = new QLabel("当前位置:");
    m_startLabel->setFixedWidth(100);

    m_posLabel = new QLabel("");
    m_posLabel->setFixedWidth(100);//固定宽度

    statusBar()->addPermanentWidget(m_startLabel);//添加永久性部件
    statusBar()->addPermanentWidget(m_posLabel);
    resize(400,200);
}

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

void MainWindow::mousePressEvent(QMouseEvent *e)
{
    QString str = "(" + QString::number(e->x()) +"," +  QString::number(e->y()) + ")";
    if(e->button() == Qt::LeftButton) statusBar()->showMessage(QString("左键")+str);
    if(e->button() == Qt::MidButton) statusBar()->showMessage(QString("中建:")+str);
    if(e->button() & Qt::RightButton) statusBar()->showMessage(QString("右键:")+str);
}

void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
    QString posStr;
    posStr = "(" + QString::number(e->x()) + "," + QString::number(e->y()) + ")";
    m_posLabel->setText(posStr);
}

void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
    QString posStr;
    posStr = "(" + QString::number(e->x()) + "," + QString::number(e->y()) + ")";
    m_posLabel->setText(posStr);
    statusBar()->showMessage(QString("释放在")+posStr,3000);//显示三秒
}

 

posted @ 2022-04-25 14:57  乐吴  阅读(99)  评论(0编辑  收藏  举报