标题:Qt 中拖动无边框窗口遇到了问题,求大神帮忙
取消只看楼主
小码农
Rank: 9Rank: 9Rank: 9
来 自:大山里
等 级:蜘蛛侠
威 望:7
帖 子:151
专家分:1198
注 册:2014-11-8
结帖率:100%
 问题点数:0 回复次数:1 
Qt 中拖动无边框窗口遇到了问题,求大神帮忙
我做了一个窗口,把它设为了无边框,这样就无法实现拖动了。我网上看了好久,是要重写
void mousePressEvent (QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
这三个函数,我重写了,但拖动窗口的时候程序就崩掉了,不知道为什么?
源码如下:
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMouseEvent>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void mousePressEvent (QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);

private:
    Ui::MainWindow *ui;
    bool shouldMove;        //是否要改变窗口位置
    QPoint *formerMainPos;      //移动前窗口的位置
    QPoint *formerMousePos;  //第一次按下左键时鼠标的位置

};

#endif // MAINWINDOW_H

CPP文件:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setMouseTracking(true);
    this->shouldMove=false;
    this->setWindowFlags(Qt::FramelessWindowHint);
}

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

void MainWindow::mousePressEvent (QMouseEvent *event)
    {
        if (event->button()==Qt::LeftButton){
            shouldMove = true;
            *formerMainPos =this->pos();
            *formerMousePos = event->globalPos();
            event->accept();
        }
    }

void MainWindow::mouseReleaseEvent(QMouseEvent *event){
        if (event->button()==Qt::LeftButton){
            shouldMove = false;
        }
    }

void MainWindow::mouseMoveEvent ( QMouseEvent * event )
    {
        QPoint point = event->globalPos();

        if (shouldMove&&(event->button()==Qt::LeftButton))
        {
            int x = point.x()-formerMousePos->x();
            int y = point.y()-formerMousePos->y();
            this->move(formerMainPos->x()+x,formerMainPos->y()+y);
            event->accept();
        }
    }

没多少分了,大神莫嫌弃。
搜索更多相关主题的帖子: include public 网上 
2014-11-19 13:29
小码农
Rank: 9Rank: 9Rank: 9
来 自:大山里
等 级:蜘蛛侠
威 望:7
帖 子:151
专家分:1198
注 册:2014-11-8
得分:0 
没有大神帮忙吗?

沉淀自己,厚积薄发!
2014-11-20 23:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-438856-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.160033 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved