QT [QT]の使用例は、マウスドラッグ格子のマウスイベントを書き、座標変換

QTの使用例は、マウスドラッグ格子のマウスイベントを記述し、座標変換

UIを使用して新しいプロジェクトを作成します。

1.uiインターフェース

ヘッダファイルを追加します。2.

#include <QDialog>
#include <QMouseEvent>

3. Add関数と変数の宣言

private:
    void mousePressEvent(QMouseEvent *);
    void mouseReleaseEvent(QMouseEvent *);
    void mouseMoveEvent(QMouseEvent *);
private:
    Ui::MouseDialog *ui;
    bool m_bDrag;//判断是否是左键选中
    QPoint m_ptPos;//记录鼠标和label相对位置

4. [追加機能の.cpp

MouseDialog::MouseDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MouseDialog)
{
    ui->setupUi(this);
}

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

void MouseDialog::mousePressEvent(QMouseEvent *event){
    if(event->button() == Qt::LeftButton){
        //获取label矩形区域
        QRect rcBlock = ui->label->frameRect();
        //平移,让rcBlck和窗口坐标系一致
        rcBlock.translate(ui->label->pos());
        //判断鼠标点击的坐标是否在label区域内
        if(rcBlock.contains(event->pos()) == true){
            m_bDrag = true;
            //计算相对偏移量
            m_ptPos = ui->label->pos()-event->pos();
        }
    }
}
void MouseDialog::mouseReleaseEvent(QMouseEvent *event){
    if(event->button() == Qt::LeftButton){
        m_bDrag = false;
    }
}
void MouseDialog::mouseMoveEvent(QMouseEvent *event){
    if(m_bDrag){
        //计算新坐标
        QPoint ptPos = event->pos() + m_ptPos;
        //获取窗口大小
        QSize szClient = size();
        //获取label位置
        QRect rcBlock = ui->label->frameRect();
        //x坐标范围(0--(窗口x-label宽度))
        if(ptPos.x() < 0)
            ptPos.setX(0);
        else if(ptPos.x() >
                szClient.width()-rcBlock.width()){
            ptPos.setX(szClient.width()-rcBlock.width());
        }
        //y坐标范围(0--(窗口y-label高度))
        if(ptPos.y() < 0)
            ptPos.setY(0);
        else if(ptPos.y() >
                szClient.height()-rcBlock.height()){
            ptPos.setY(szClient.height()-rcBlock.height());
        }

        //移动到新的位置
        ui->label->move(ptPos);
    }
}

5.ファイル名を指定して実行

公開された201元の記事 ウォン称賛46 ビュー90000 +

おすすめ

転載: blog.csdn.net/rong11417/article/details/104475786