Задать вопрос
Dimpik
@Dimpik

Ошибка LNK2019: Qt C++. Как устранить?

Здравствуйте, уважаемые программисты C++. Программирую игру на Qt. Собирался было уже делать управление игроком, но тут ошибка : LNK2019. Вот сама ошибка: player.obj:-1: error: LNK2019: « __imp_GetAsyncKeyState "public: void __cdecl Player::moving(void)" (?moving@Player@@QEAAXXZ). Пробовал найти решение, там говорят что нужно перезапустить qmake, но не помогает. Вот код игры:

Player.h:
#pragma once

#include <QObject>
#include <QGraphicsItem>
#include <QTimer>
#include <QPixmap>
#include <QPainter>
#include <QLabel>



class Player: public QObject, public QGraphicsItem
{
    Q_OBJECT

public:
    Player(QObject *parent = 0);
    int pWidth = 110;
    int pHeigth = 110;
    int x = 205;
    int y = 400;


public slots:
    void moving();

private:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget) override;
    QRectF boundingRect() const override;
    QPixmap  *spriteImage; // В данный объект pixmap будет помещен спрайт



};


View.h:
#pragma once

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QObject>

#include "player.h"

class View :public QGraphicsView
{
public:
    View();
    void view_elements();
    void gameStarted();


private:
    QGraphicsScene mainScene;
    Player pl;
    QTimer     *timer; // Таймер


};


main.cpp:
#include "view.h"
#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    View v;
    v.show();

    return a.exec();
}


View.cpp:
#include "view.h"
#include "player.h"

#include <QObject>
#include <QTimer>

View::View()
{

    setWindowTitle("Space Rangers");

    setRenderHint(QPainter::Antialiasing);

    setFrameStyle(0);
    setSceneRect(0, 0, 500,600);
    setFixedSize(500, 600);

    mainScene.setSceneRect(0, 0, 500,600);
    mainScene.setItemIndexMethod(QGraphicsScene::NoIndex);
    setScene(&mainScene);

    timer = new QTimer();
    connect(timer, &QTimer::timeout, &pl, &Player::moving);
    view_elements();


}

void View::view_elements(){

    pl.setPos(205, 400);
    mainScene.addItem(&pl);


}


Player.cpp:
#include "player.h"

#include <QtWidgets>

using namespace Qt;

Player::Player(QObject *parent):QObject(parent), QGraphicsItem()
{
    spriteImage = new QPixmap();
    spriteImage->load(":/Player.png");

}

QRectF Player::boundingRect() const{

    return QRectF(0, 0, pWidth, pHeigth);
}

void Player::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget){

    painter->drawPixmap(0, 0, pWidth, pHeigth, *spriteImage);
    Q_UNUSED(option);
    Q_UNUSED(widget);

}

void Player::moving()
{
//*******************Обработка нажатий клавиш на клавиатуре*********************************************

    if(GetAsyncKeyState(VK_LEFT)){
        setPos(mapToParent(-4, 0));
    }

    if(GetAsyncKeyState(VK_RIGHT)){
        setPos(mapToParent(4, 0));
    }

    if(GetAsyncKeyState(VK_UP)){
        setPos(mapToParent(0, 5));
    }

    if(GetAsyncKeyState(VK_DOWN)){
        setPos(mapToParent(0, -4));
    }
}


Буду очень благодарен за ответ.
  • Вопрос задан
  • 460 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Нужно добавить линковку с User32.lib в файле проекта *.pro
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы