首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移动QRubberband从一个点到另一个点

移动QRubberband从一个点到另一个点
EN

Stack Overflow用户
提问于 2014-06-25 09:32:44
回答 1查看 2.5K关注 0票数 1

我在QRubberband上画了一张QLabel。我可以使用QSizeGrip来调整它的大小。现在,我想使用QMouseevents将它从一个点移到另一个点。有没有人能帮我。

代码语言:javascript
复制
void CropImage::mousePressEvent(QMouseEvent *event)
{
    QLabel::mousePressEvent(event);
    lastPoint = event->pos();
    rubberband = new QRubberBand(QRubberBand::Rectangle,this);
    rubberband->setGeometry(QRect(lastPoint, QSize()));
    rubberband->show();

}

void CropImage::mouseReleaseEvent(QMouseEvent *event)
{
    newPoint = event->pos();
}

这是我的子类部分,用于鼠标事件。守则如下:

代码语言:javascript
复制
Resizable_rubber_band::Resizable_rubber_band(QWidget *parent) : QWidget(parent)
{
 //tell QSizeGrip to resize this widget instead of top-level window
 setWindowFlags(Qt::SubWindow);
 QHBoxLayout* layout = new QHBoxLayout(this);
 layout->setContentsMargins(0, 0, 0, 0);
 QSizeGrip* grip1 = new QSizeGrip(this);
 QSizeGrip* grip2 = new QSizeGrip(this);
 layout->addWidget(grip1, 0, Qt::AlignLeft | Qt::AlignTop);
 layout->addWidget(grip2, 0, Qt::AlignRight | Qt::AlignBottom);
 rubberband = new QRubberBand(QRubberBand::Rectangle, this);
 rubberband->move(0, 0);
 rubberband->show();
}

 void Resizable_rubber_band::resizeEvent(QResizeEvent *)
 {
    rubberband->resize(size());
 }

 void Resizable_rubber_band::mousePressEvent(QMouseEvent *event)
 {
    lastPoint = event->pos();
    rubberband->childAt(lastPoint);
 }

 void Resizable_rubber_band::mouseReleaseEvent(QMouseEvent *event)
 {
   newpoint = event->pos();
   int dragx=newpoint.x()-lastPoint.x();
   int dragy=newpoint.y()-lastPoint.y();
   band->move(0+dragx,0+dragy);
 }

在这段代码中,我的问题是在拖动后没有得到精确的坐标。

谢谢。

阿什

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-26 11:50:40

下面是我做的一个快速示例,您可以使用鼠标事件移动QRubberBand

mainwindow.h

代码语言:javascript
复制
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QRubberBand>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void mousePressEvent(QMouseEvent *e);
    void mouseMoveEvent(QMouseEvent *e);
    void mouseReleaseEvent(QMouseEvent *e);

private:
    Ui::MainWindow *ui;
    QRubberBand *rubberBand;
    bool move_rubberband;
    QPoint rubberband_offset;
};

#endif // MAINWINDOW_H

mainwindow.cpp

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMouseEvent>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    move_rubberband = false;
    rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
    rubberBand->setGeometry(0,0,50,50);
    rubberBand->show();
}

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

void MainWindow::mousePressEvent(QMouseEvent *e)
{
    if(rubberBand->geometry().contains(e->pos()))
    {
        rubberband_offset = e->pos() - rubberBand->pos();
        move_rubberband = true;
    }
}

void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
    if(move_rubberband)
    {
        rubberBand->move(e->pos() - rubberband_offset);
    }
}

void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
    move_rubberband = false;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24405044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档