Raspbian 2 player chess game
-
wrote on 25 Dec 2021, 12:23 last edited by
Hi
I am making a 2 player chess game for the Raspberry Pi.
I am getting a strange error with Qt creator :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include "newstandardgame.h"
#include <QPainter>
#include <QRect>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QPainter * ChessPiece = new QPainter(); QImage * Image = new QImage("C:\Users\User\Desktop\WhiteQueen.jpg"); //Image-> QRect Source; QRect Dest; Source.setCoords(0,0,30,30); Dest.setCoords(0,0,30,30); ChessPiece->drawImage((const RectF)Dest,Image,(const RectF)Source);
MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_NewStandardGame_clicked()
{
//NewStandardGame::show();
}C:\Desktop\ChessRaspbian\mainwindow.cpp:15: warning: C4129: 'D': unrecognized character escape sequence
-
Hi
I am making a 2 player chess game for the Raspberry Pi.
I am getting a strange error with Qt creator :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include "newstandardgame.h"
#include <QPainter>
#include <QRect>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QPainter * ChessPiece = new QPainter(); QImage * Image = new QImage("C:\Users\User\Desktop\WhiteQueen.jpg"); //Image-> QRect Source; QRect Dest; Source.setCoords(0,0,30,30); Dest.setCoords(0,0,30,30); ChessPiece->drawImage((const RectF)Dest,Image,(const RectF)Source);
MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_NewStandardGame_clicked()
{
//NewStandardGame::show();
}C:\Desktop\ChessRaspbian\mainwindow.cpp:15: warning: C4129: 'D': unrecognized character escape sequence
wrote on 25 Dec 2021, 12:32 last edited by JonB@Quantum1982 said in Raspbian 2 player chess game:
I am getting a strange error with Qt creator
It's not strange, and it's a C++ compilation error, nothing to do with Qt or Creator.
"C:\Users\User\Desktop\WhiteQueen.jpg"
How does one put literal
\
s into C/C++ string literals? -
wrote on 25 Dec 2021, 12:34 last edited by
Hi
Thanks for your replyWhat formatting am I missing here ?
-
wrote on 25 Dec 2021, 12:51 last edited by
Ok thanks
But now there is a different error :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include "newstandardgame.h"
#include <QPainter>
#include <QRect>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QPainter * ChessPiece = new QPainter(); QImage * Image = new QImage("C:/Users/User/Desktop/WhiteQueen.jpg"); //Image-> QRect Source; QRect Dest; Source.setCoords(0,0,30,30); Dest.setCoords(0,0,30,30); ChessPiece->drawImage(Dest,Image,Source);
MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_NewStandardGame_clicked()
{
//NewStandardGame::show();
}#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include "newstandardgame.h"
#include <QPainter>
#include <QRect>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QPainter * ChessPiece = new QPainter(); QImage * Image = new QImage("C:/Users/User/Desktop/WhiteQueen.jpg"); //Image-> QRect Source; QRect Dest; Source.setCoords(0,0,30,30); Dest.setCoords(0,0,30,30); ChessPiece->drawImage(Dest,Image,Source);
MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_NewStandardGame_clicked()
{
//NewStandardGame::show();
}
C:\Desktop\ChessRaspbian\mainwindow.cpp:24: error: C2664: 'void QPainter::drawImage(int,int,const QImage &,int,int,int,int,Qt::ImageConversionFlags)': cannot convert argument 2 from 'QImage *' to 'const QImage &'
..\ChessRaspbian\mainwindow.cpp(24): note: Reason: cannot convert from 'QImage *' to 'const QImage'
..\ChessRaspbian\mainwindow.cpp(24): note: No constructor could take the source type, or constructor overload resolution was ambiguous -
wrote on 25 Dec 2021, 18:18 last edited by
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include "newstandardgame.h"
#include <QPainter>
#include <QRect>
#include <QString>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QString ChessPieces[12]; ChessPieces[0] = "C:/Users/User/Desktop/WhitePawn.jpg"; ChessPieces[1] = "C:/Users/User/Desktop/WhiteRook.jpg"; ChessPieces[2] = "C:/Users/User/Desktop/WhiteKnight.jpg"; ChessPieces[3] = "C:/Users/User/Desktop/WhiteBishop.jpg"; ChessPieces[4] = "C:/Users/User/Desktop/WhiteQueen.jpg"; ChessPieces[5] = "C:/Users/User/Desktop/WhiteKing.jpg"; ChessPieces[6] = "C:/Users/User/Desktop/BlackPawn.jpg"; ChessPieces[7] = "C:/Users/User/Desktop/BlackRook.jpg"; ChessPieces[8] = "C:/Users/User/Desktop/BlackKnight.jpg"; ChessPieces[9] = "C:/Users/User/Desktop/BlackBishop.jpg"; ChessPieces[10] = "C:/Users/User/Desktop/BlackQueen.jpg"; ChessPieces[11] = "C:/Users/User/Desktop/BlackKing.jpg"; QPainter * ChessPiece = new QPainter(); QImage * Image = new QImage("C:/Users/User/Desktop/WhiteQueen.jpg"); //Image-> QRect Source; QRect Dest; Source.setCoords(0,0,30,30); Dest.setCoords(0,0,30,30); //QPainter *Painter = new QPainter(); //Painter->drawImage(Dest,Image,Source); //const QPixmap Pixmap; //ChessPiece->drawImage(Dest,Image,Source);
// ChessPiece->drawPixmap(0,0,30,30,Pixmap);
}
MainWindow::~MainWindow()
{
delete ui;
}
moc_mainwindow.obj:-1: error: LNK2019: unresolved external symbol "private: void __cdecl MainWindow::on_NewStandardGame_clicked(void)" (?on_NewStandardGame_clicked@MainWindow@@AEAAXXZ) referenced in function "private: static void __cdecl MainWindow::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall@MainWindow@@CAXPEAVQObject@@W4Call@QMetaObject@@HPEAPEAX@Z) -
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include "newstandardgame.h"
#include <QPainter>
#include <QRect>
#include <QString>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QString ChessPieces[12]; ChessPieces[0] = "C:/Users/User/Desktop/WhitePawn.jpg"; ChessPieces[1] = "C:/Users/User/Desktop/WhiteRook.jpg"; ChessPieces[2] = "C:/Users/User/Desktop/WhiteKnight.jpg"; ChessPieces[3] = "C:/Users/User/Desktop/WhiteBishop.jpg"; ChessPieces[4] = "C:/Users/User/Desktop/WhiteQueen.jpg"; ChessPieces[5] = "C:/Users/User/Desktop/WhiteKing.jpg"; ChessPieces[6] = "C:/Users/User/Desktop/BlackPawn.jpg"; ChessPieces[7] = "C:/Users/User/Desktop/BlackRook.jpg"; ChessPieces[8] = "C:/Users/User/Desktop/BlackKnight.jpg"; ChessPieces[9] = "C:/Users/User/Desktop/BlackBishop.jpg"; ChessPieces[10] = "C:/Users/User/Desktop/BlackQueen.jpg"; ChessPieces[11] = "C:/Users/User/Desktop/BlackKing.jpg"; QPainter * ChessPiece = new QPainter(); QImage * Image = new QImage("C:/Users/User/Desktop/WhiteQueen.jpg"); //Image-> QRect Source; QRect Dest; Source.setCoords(0,0,30,30); Dest.setCoords(0,0,30,30); //QPainter *Painter = new QPainter(); //Painter->drawImage(Dest,Image,Source); //const QPixmap Pixmap; //ChessPiece->drawImage(Dest,Image,Source);
// ChessPiece->drawPixmap(0,0,30,30,Pixmap);
}
MainWindow::~MainWindow()
{
delete ui;
}
moc_mainwindow.obj:-1: error: LNK2019: unresolved external symbol "private: void __cdecl MainWindow::on_NewStandardGame_clicked(void)" (?on_NewStandardGame_clicked@MainWindow@@AEAAXXZ) referenced in function "private: static void __cdecl MainWindow::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall@MainWindow@@CAXPEAVQObject@@W4Call@QMetaObject@@HPEAPEAX@Z)wrote on 25 Dec 2021, 19:21 last edited by@Quantum1982
At a guess: you used to have a slot methodvoid MainWindow::on_NewStandardGame_clicked()
. You seem to have removed its definition in your latest code. Has its declaration been removed from the class declaration in the.h
file? Is there still aconnect()
referencing it? Maybe search your source files foron_NewStandardGame_clicked
. Have you re-runqmake
and done a full rebuild? -
wrote on 26 Dec 2021, 11:36 last edited by
Thanks I fixed it.
My newest problem is this :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include "newstandardgame.h"
#include <QPainter>
#include <QRect>
#include <QString>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QString ChessPieces[12]; ChessPieces[0] = "C:/Users/User/Desktop/WhitePawn.jpg"; ChessPieces[1] = "C:/Users/User/Desktop/WhiteRook.jpg"; ChessPieces[2] = "C:/Users/User/Desktop/WhiteKnight.jpg"; ChessPieces[3] = "C:/Users/User/Desktop/WhiteBishop.jpg"; ChessPieces[4] = "C:/Users/User/Desktop/WhiteQueen.jpg"; ChessPieces[5] = "C:/Users/User/Desktop/WhiteKing.jpg"; ChessPieces[6] = "C:/Users/User/Desktop/BlackPawn.jpg"; ChessPieces[7] = "C:/Users/User/Desktop/BlackRook.jpg"; ChessPieces[8] = "C:/Users/User/Desktop/BlackKnight.jpg"; ChessPieces[9] = "C:/Users/User/Desktop/BlackBishop.jpg"; ChessPieces[10] = "C:/Users/User/Desktop/BlackQueen.jpg"; ChessPieces[11] = "C:/Users/User/Desktop/BlackKing.jpg"; QPainter * ChessPiece = new QPainter(); QImage * Image = new QImage("C:/Users/User/Desktop/WhiteQueen.jpg"); //Image-> QRect Source; QRect Dest; Source.setCoords(0,0,30,30); Dest.setCoords(100,100,200,200); QPainter *Painter = new QPainter(); Painter->drawImage(Dest,*Image,Source); //const QPixmap Pixmap; //ChessPiece->drawImage(Dest,Image,Source);
// ChessPiece->drawPixmap(0,0,30,30,Pixmap);
}
MainWindow::~MainWindow()
{
delete ui;
}The chess piece is not drawn for some reason ?
-
Hi,
How do you determine they are not drawn ?
-
wrote on 28 Dec 2021, 13:31 last edited by
I mean that the chess piece is not showing on the screen ?
-
The code you posted does not include anything that would bring the QImage on screen.
-
wrote on 30 Dec 2021, 15:57 last edited by
@Quantum1982 said in Raspbian 2 player chess game:
Painter->drawImage(Dest,*Image,Source);
But what about the line :
Painter->drawImage(Dest,*Image,Source); ?
-
That painter does in fact not paint on anything.
Please re-read the class documentation.
-
wrote on 31 Dec 2021, 14:57 last edited by
Ok
I changed it to this :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
#include <QImage>
#include <QRectF>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QRectF target(10.0,10.0,50.0,50.0); QRectF source(0.0,0.0,50.0,50.0); // QImage Image("C:/Users/User/Desktop/WhiteQueen.jpg"); QPixmap Pixmap("C:/Users/User/Desktop/WhiteQueen.jpg"); QPainter Painter; Painter.drawPixmap(target,Pixmap,source);
}
MainWindow::~MainWindow()
{
delete ui;
}Still no chess piece on the screen ?
-
Because you are still using QPainter incorrectly. A bit less than before but still incorrectly.
You should paint what you want on a QPixmap that you will set on a QLabel if you want to show it.
-
wrote on 31 Dec 2021, 20:42 last edited by
Ok, but now I am getting this error
C:\Users\User\Documents\Chess\main.cpp:-1: error: C1041: cannot open program database 'C:\Users\User\Documents\build-Chess-Desktop_Qt_5_12_12_MSVC2015_64bit-Debug\debug\Chess.vc.pdb'; if multiple CL.EXE write to the same .PDB file, please use /FS
-
wrote on 31 Dec 2021, 20:53 last edited by
Ok I fixed it.
Now I am trying this :
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QImage>
#include <QLabel>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QPixmap Pixmap("C:/Users/User/Desktop/WhiteQueen.jpg"); QLabel WhiteQueen; WhiteQueen.setGeometry(50,50,100,100); WhiteQueen.setPixmap(Pixmap);
}
MainWindow::~MainWindow()
{
delete ui;
}Still nothing appears ?
-
Ok I fixed it.
Now I am trying this :
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QImage>
#include <QLabel>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QPixmap Pixmap("C:/Users/User/Desktop/WhiteQueen.jpg"); QLabel WhiteQueen; WhiteQueen.setGeometry(50,50,100,100); WhiteQueen.setPixmap(Pixmap);
}
MainWindow::~MainWindow()
{
delete ui;
}Still nothing appears ?
wrote on 31 Dec 2021, 20:59 last edited by JonB@Quantum1982
QLabel WhiteQueen;
is a local variable. It goes out of scope at the end of the constructor. And you never added theQLabel
to theMainWindow
anyway.I would take some time to look at some basic Qt widgets examples.
-
wrote on 31 Dec 2021, 21:06 last edited by
Ok, so where should I declare the label then for it to be drawn ?
-
Ok, so where should I declare the label then for it to be drawn ?
wrote on 31 Dec 2021, 21:31 last edited by JonB@Quantum1982
This is not a longterm design plan. But from where you are now:- Move the variable out to be a member of the
MainWindow
class. - Change it to be a pointer.
- Set it to a
new
ed instance back in the constructor, with theMainWindow
as its parent:WhiteQueen = new QLabel(this)
.
At least you should then be able to see it.
I'm not sure I would do this whole chess UI with widgets, probably a graphics scene with
QGraphicsPixmapItem
s instead, but that's a whole different matter. - Move the variable out to be a member of the
-
wrote on 1 Jan 2022, 11:43 last edited by
I am not sure how to do that.
This is what I have so far :
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QImage>
#include <QLabel>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);QString ChessPieces[12]; ChessPieces[0] = "C:/Users/User/Desktop/WhitePawn.jpg"; ChessPieces[1] = "C:/Users/User/Desktop/WhiteRook.jpg"; ChessPieces[2] = "C:/Users/User/Desktop/WhiteKnight.jpg"; ChessPieces[3] = "C:/Users/User/Desktop/WhiteBishop.jpg"; ChessPieces[4] = "C:/Users/User/Desktop/WhiteQueen.jpg"; ChessPieces[5] = "C:/Users/User/Desktop/WhiteKing.jpg"; ChessPieces[6] = "C:/Users/User/Desktop/BlackPawn.jpg"; ChessPieces[7] = "C:/Users/User/Desktop/BlackRook.jpg"; ChessPieces[8] = "C:/Users/User/Desktop/BlackKnight.jpg"; ChessPieces[9] = "C:/Users/User/Desktop/BlackBishop.jpg"; ChessPieces[10] = "C:/Users/User/Desktop/BlackQueen.jpg"; ChessPieces[11] = "C:/Users/User/Desktop/BlackKing.jpg"; QPixmap Pixmap("C:/Users/User/Desktop/WhiteQueen.jpg"); WhiteQueen.setGeometry(50,50,100,100); WhiteQueen.setPixmap(Pixmap);
}
MainWindow::~MainWindow()
{
delete ui;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QLabel>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{
Q_OBJECTpublic:
QLabel WhiteQueen;
MainWindow(QWidget *parent = nullptr);
~MainWindow();private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_HThen there is still no chess piece displayed ?
1/56