新人求教各位老人qt实现图片的移动

时间:2022-09-21 23:20:52
本人比较愚笨请大神们多多谅解,我想做一个用qt来做一个图片移动的程序,我用label添加了图片,图片显示什么的都完成了,就是移动这块不会,qt的有关函数一点也不通,有人说用图形学做,我都不知道图形学做是什么,也求老人科普一下,控件移动,我也是完全不懂。老师们把程序大体写下来,稍加知道就好。求老师别说从头看什么的,这毕竟是个任务,我从头开始的话这个小任务要做不少时间呢。

10 个解决方案

#1


在keyPressEvent里写,
头文件里添加声明
protected:
    void keyPressEvent(QKeyEvent *e);



cpp文件里添加实现
void Dialog::keyPressEvent(QKeyEvent *e)
{
    int x = ui->label->geometry().x();
    int y = ui->label->geometry().y();
    int width = ui->label->geometry().width();
    int height = ui->label->geometry().height();
    if(e->key()==Qt::Key_Up)
    {
        ui->label->setGeometry(x,y-1,width,height);
    } else if(e->key() == Qt::Key_Down)
    {
         ui->label->setGeometry(x,y+1,width,height);
    }else if(e->key() == Qt::Key_Left)
    {
         ui->label->setGeometry(x-1,y,width,height);
    }else if(e->key() == Qt::Key_Right)
    {
         ui->label->setGeometry(x+1,y,width,height);
    }

}


类似这样,上面代码是判断键盘事件,鼠标拖动的话同理。

#2


你的图片的移动,转化为QLabel的移动,QLabel 的鼠标移动,一个简单的问题,不要套纲套线的上图形学。
1 记录下鼠标当前位置。
2 鼠标移动后的位置,减去前面记录的位置得到移动的偏移量。
3 QLabel的位置加上为步骤2 中的偏移量。

#3


引用 1 楼 sdu_hanson 的回复:
在keyPressEvent里写,
头文件里添加声明
protected:
    void keyPressEvent(QKeyEvent *e);



cpp文件里添加实现
void Dialog::keyPressEvent(QKeyEvent *e)
{
    int x = ui->label->geometry().x();
    int y = ui->label->geometry().y();
    int width = ui->label->geometry().width();
    int height = ui->label->geometry().height();
    if(e->key()==Qt::Key_Up)
    {
        ui->label->setGeometry(x,y-1,width,height);
    } else if(e->key() == Qt::Key_Down)
    {
         ui->label->setGeometry(x,y+1,width,height);
    }else if(e->key() == Qt::Key_Left)
    {
         ui->label->setGeometry(x-1,y,width,height);
    }else if(e->key() == Qt::Key_Right)
    {
         ui->label->setGeometry(x+1,y,width,height);
    }

}


类似这样,上面代码是判断键盘事件,鼠标拖动的话同理。


////////////////////////////////////
3q 但是还是不会
我想让图片自己移动 
我的代码就是最原始的那种,是这样的:
MainWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
};

#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);
}

MainWindow::~MainWindow()
{

    delete ui;
}
____________________________

#4


引用 2 楼 hackenliu 的回复:
你的图片的移动,转化为QLabel的移动,QLabel 的鼠标移动,一个简单的问题,不要套纲套线的上图形学。
1 记录下鼠标当前位置。
2 鼠标移动后的位置,减去前面记录的位置得到移动的偏移量。
3 QLabel的位置加上为步骤2 中的偏移量。

谢谢 但是能帮忙写下具体的代码吗 ?我悟性确实差!谢谢

#5


自己重写鼠标的press、move、release事件

#6


引用 5 楼 unsigned_lu 的回复:
自己重写鼠标的press、move、release事件

能具体说明一下吗,根据我的代码修改一下

#7


建议楼主看下Qt的动画,或者如楼上们 所说,重写鼠标事件

#8


这样都不会。。。
你还是别写了,先看书吧

#9


用QPainterPath实现,qt帮助文档中有例子

#10


引用 8 楼 sdu_hanson 的回复:
这样都不会。。。
你还是别写了,先看书吧
cao 说的你呀的多牛似的  你牛笔倒是把代码给人家写出来啊 还先看书 看你大爷 不会别瞎在这比比

#1


在keyPressEvent里写,
头文件里添加声明
protected:
    void keyPressEvent(QKeyEvent *e);



cpp文件里添加实现
void Dialog::keyPressEvent(QKeyEvent *e)
{
    int x = ui->label->geometry().x();
    int y = ui->label->geometry().y();
    int width = ui->label->geometry().width();
    int height = ui->label->geometry().height();
    if(e->key()==Qt::Key_Up)
    {
        ui->label->setGeometry(x,y-1,width,height);
    } else if(e->key() == Qt::Key_Down)
    {
         ui->label->setGeometry(x,y+1,width,height);
    }else if(e->key() == Qt::Key_Left)
    {
         ui->label->setGeometry(x-1,y,width,height);
    }else if(e->key() == Qt::Key_Right)
    {
         ui->label->setGeometry(x+1,y,width,height);
    }

}


类似这样,上面代码是判断键盘事件,鼠标拖动的话同理。

#2


你的图片的移动,转化为QLabel的移动,QLabel 的鼠标移动,一个简单的问题,不要套纲套线的上图形学。
1 记录下鼠标当前位置。
2 鼠标移动后的位置,减去前面记录的位置得到移动的偏移量。
3 QLabel的位置加上为步骤2 中的偏移量。

#3


引用 1 楼 sdu_hanson 的回复:
在keyPressEvent里写,
头文件里添加声明
protected:
    void keyPressEvent(QKeyEvent *e);



cpp文件里添加实现
void Dialog::keyPressEvent(QKeyEvent *e)
{
    int x = ui->label->geometry().x();
    int y = ui->label->geometry().y();
    int width = ui->label->geometry().width();
    int height = ui->label->geometry().height();
    if(e->key()==Qt::Key_Up)
    {
        ui->label->setGeometry(x,y-1,width,height);
    } else if(e->key() == Qt::Key_Down)
    {
         ui->label->setGeometry(x,y+1,width,height);
    }else if(e->key() == Qt::Key_Left)
    {
         ui->label->setGeometry(x-1,y,width,height);
    }else if(e->key() == Qt::Key_Right)
    {
         ui->label->setGeometry(x+1,y,width,height);
    }

}


类似这样,上面代码是判断键盘事件,鼠标拖动的话同理。


////////////////////////////////////
3q 但是还是不会
我想让图片自己移动 
我的代码就是最原始的那种,是这样的:
MainWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
};

#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);
}

MainWindow::~MainWindow()
{

    delete ui;
}
____________________________

#4


引用 2 楼 hackenliu 的回复:
你的图片的移动,转化为QLabel的移动,QLabel 的鼠标移动,一个简单的问题,不要套纲套线的上图形学。
1 记录下鼠标当前位置。
2 鼠标移动后的位置,减去前面记录的位置得到移动的偏移量。
3 QLabel的位置加上为步骤2 中的偏移量。

谢谢 但是能帮忙写下具体的代码吗 ?我悟性确实差!谢谢

#5


自己重写鼠标的press、move、release事件

#6


引用 5 楼 unsigned_lu 的回复:
自己重写鼠标的press、move、release事件

能具体说明一下吗,根据我的代码修改一下

#7


建议楼主看下Qt的动画,或者如楼上们 所说,重写鼠标事件

#8


这样都不会。。。
你还是别写了,先看书吧

#9


用QPainterPath实现,qt帮助文档中有例子

#10


引用 8 楼 sdu_hanson 的回复:
这样都不会。。。
你还是别写了,先看书吧
cao 说的你呀的多牛似的  你牛笔倒是把代码给人家写出来啊 还先看书 看你大爷 不会别瞎在这比比