Qt:整体可拖动窗口

来源:互联网 发布:迪杰斯特拉算法伪代码 编辑:程序博客网 时间:2024/06/07 04:56

头文件:

mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QtGui>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();private:    Ui::MainWindow *ui;    void mousePressEvent(QMouseEvent *event);//按下    void mouseMoveEvent(QMouseEvent *event);//移动    void mouseReleaseEvent(QMouseEvent *event);//抬起private:    bool m_draging;//是否拖动    QPoint m_startPostion;//拖动前鼠标位置    QPoint m_framPostion;//窗体的原始位置};#endif // MAINWINDOW_H
源文件:

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show();    return a.exec();}
mainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    m_draging = false;//初始为false;}MainWindow::~MainWindow(){    delete ui;}void MainWindow::mousePressEvent(QMouseEvent *event){    m_draging = true;    if(event->buttons() & Qt::LeftButton)//只响应鼠标左键    {        m_startPostion = event->globalPos();        m_framPostion = frameGeometry().topLeft();    }    QWidget::mousePressEvent(event);//调用父类函数保持原按键行为}void MainWindow::mouseMoveEvent(QMouseEvent *event){    if(event->buttons() & Qt::LeftButton)    {        //offset 偏移位置        QPoint offset = event->globalPos() - m_startPostion;        move(m_framPostion + offset);    }    QWidget::mouseMoveEvent(event);//调用父类函数保持原按键行为}void MainWindow::mouseReleaseEvent(QMouseEvent *event){    m_draging = false;    QWidget::mouseReleaseEvent(event);}



原创粉丝点击