自己找的图片太大,在移动的时候不明显,懒得再找图片,所以用了QPainter将图片画在了label上
代码如下
void Widget::paintEvent(QPaintEvent *)
QPainter painter(this);
QPixmap pix;
pix.load(":img/move.png");
painter.drawPixmap(picLabel->x(),picLabel->y(),picLabel->width(),picLabel->height(),pix);
将图片上下左右移动是通过重写keyPressEvent虚方法,在这个方法中捕捉按钮事件,用move移动位置
代码如下
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLabel>
#include <QPainter>
#include <QKeyEvent>
#include <QDebug>
class Widget : public QWidget
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QLabel *picLabel;
protected:
void paintEvent(QPaintEvent *);
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
#endif // WIDGET_H
widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
resize(500, 500);
picLabel = new QLabel(this);
picLabel->setFixedSize(50, 50);
void Widget::paintEvent(QPaintEvent *)
QPainter painter(this);
QPixmap pix;
pix.load(":img/move.png");
painter.drawPixmap(picLabel->x(),picLabel->y(),picLabel->width(),picLabel->height(),pix);
void Widget::keyPressEvent(QKeyEvent *event)
int x = 0;
int y = 0;
switch (event->key()) {
case Qt::Key_Up:
y = picLabel->y() - 10;
if(y > -10)
picLabel->move(picLabel->x(), y);
break;
case Qt::Key_Down:
y = picLabel->y() + 10;
if(y < this->height() - 40)
picLabel->move(picLabel->x(), y);
break;
case Qt::Key_Right:
x = picLabel->x() + 10;
if(x < this->width() - 40)
picLabel->move(x, picLabel->y());
break;
case Qt::Key_Left:
x = picLabel->x() - 10;
if(x > -10)
picLabel->move(x, picLabel->y());
break;
default:
break;
void Widget::keyReleaseEvent(QKeyEvent *event)
Widget::~Widget()
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
自己找的图片太大,在移动的时候不明显,懒得再找图片,所以用了QPainter将图片画在了label上 代码如下void Widget::paintEvent(QPaintEvent *){ QPainter painter(this); QPixmap pix; pix.load(":img/move.png");//图片的位置 painter.drawPixma
1. Qt事件概述
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。对于初学者,总会对Qt中信号和事件的概念混淆不清。其实,记住事件比信号更底层就可以了。比如说,我们用鼠标按下界面上的一个按钮,它会发射clicked()单击信号,但是,它怎么知道自己被按下的呢,那就是通过鼠标事件处理的。这里可以看到,鼠标事件比信号更底层。
在Qt中处理事件有多种方法,不过最常用的是重写Qt事件处理函数。
2. Qt事件的来源
3. Qt事件机制
Qt中定义的事件是一个从QEvent类继承而来的对象,它表示应用程序内部或外部发生了某些应用程序自身必须知道的事情。任何从QObjec
https://blog.csdn.net/learn_sunzhuli/article/details/45830797
看的是这个博客,用的是vtkcommand.有这个需要的可以看看,我用的不是这个,但是借鉴了一下。
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
ui->se...
一、项目内容:
新建桌面应用程序testKeyEvent,类名KeyEvent,基类QWidget,通过重写键盘事件到达操作的键盘的时候窗口中的图片上下左右移动,类似QtCreator设计模式下通过按键摆放部件时的效果。
二、实现细节
keyevent.h内容:
#ifndef KEYEVENT_H
#define KEYEVENT_H
#include <QWidget>
QT_BEGIN_NAMESPACE
点击下面的按钮可以切换动画。
图片可以是很多张很多张的,但显示在窗口上的只有三张,但它们的顺序是不会变的。
如果能直接有qml上面的pathview的组件能直接使用那就更好了,就不能自己敲widget了。
首先,大概是这么一个窗口:
其中,灰色部分就是整个widget的大小,就是说leftprepare和rightprepare是在widget外的,就是准备着的。
左移和右移差不多,那只要明白左移
创建一个VerticalScroll的文件,形成一个类。这个类的父窗体必须是QWidget。
使用MainWindow中的一个QWidget,显示VerticalScroll的类。可以创建多个窗口。
类VerticalScroll,可以发送信号,也可以通过父窗体的程序改变各种设定。
2. VerticalScroll的代码,有详细注解的
QPixmap back;
back.load(":/img/gamemap.bmp");
back = back.scaled(QSize(this->width(),this->height()));
2、paintEvent函数
(1)在头文件中声明paintEvent函数
private:
void paintEvent(QPaintEvent *event);
paintEvent在父类中声明,这里重写这个绘制函数
(2)编写paintEvent函数
要在Qt中实现对照片的上下左右移动,可以通过在QLabel中设置QPixmap的位置来实现。具体步骤如下:
1. 创建一个QLabel对象,并通过setPixmap()函数设置QPixmap对象为标签的显示图像。
2. 通过setAlignment()函数设置标签上的图像的对齐方式。
3. 通过setPosition()函数设置图像的位置。
4. 创建一个QKeyEvent对象,并在事件处理函数中实现对键盘事件的响应,通过改变QPixmap对象的位置实现图像的上下左右移动。
示例代码如下:
```cpp
#include <QApplication>
#include <QLabel>
#include <QPixmap>
#include <QKeyEvent>
class ImageLabel : public QLabel
public:
ImageLabel(QWidget *parent = nullptr)
: QLabel(parent)
// 加载图像文件
m_pixmap.load("image.jpg");
// 设置标签的图像和对齐方式
setPixmap(m_pixmap);
setAlignment(Qt::AlignCenter);
// 设置图像的初始位置
m_pos = QPoint(0, 0);
protected:
void keyPressEvent(QKeyEvent *event) override
int dx = 0, dy = 0;
// 根据按键修改图像的位置
switch (event->key()) {
case Qt::Key_Up:
dy = -10;
break;
case Qt::Key_Down:
dy = 10;
break;
case Qt::Key_Left:
dx = -10;
break;
case Qt::Key_Right:
dx = 10;
break;
default:
break;
// 修改图像的位置
m_pos += QPoint(dx, dy);
movePixmap(m_pos);
private:
QPixmap m_pixmap;
QPoint m_pos;
void movePixmap(QPoint pos)
// 移动图像到新的位置
setPixmap(m_pixmap.copy(QRect(pos, size())));
int main(int argc, char *argv[])
QApplication a(argc, argv);
// 创建标签并显示
ImageLabel label;
label.show();
return a.exec();
在上述示例中,我们继承了QLabel类,并在其中实现了对键盘事件的响应。在事件处理函数中,根据按键修改图像的位置,并调用movePixmap()函数将QPixmap对象移动到新的位置。最后,在main函数中创建标签并显示。
data类型的Url格式--url(data:image/gif;base64,AAAA):把小数据直接嵌入到Url中
学弱笨笨: