Я пытался создать игру tictactoe, используя Qt и Qgraphicsview, но когда я рисую x на доске с помощью Graphicstextitem в mousePressEvent, X не появляется. как это исправить?
Я думаю, проблема в том, что сцена текстового элемента отличается от сцены основного файла, но я не знаю, как это исправить.
основной.cpp:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Game *gm = new Game;
Game *rect1=new Game;
gm->scenc->setSceneRect(0,0,800,600);
rect1->setRect(160,100,150,150);
gm->scenc->addItem(rect1);
gm->view->setScene(gm->scenc);
gm->view->show();
return a.exec();
}
в игре.cpp:
#include <game.h>
Game::Game()
{
scenc= new QGraphicsScene;
view = new QGraphicsView;
text= new QGraphicsTextItem;
}
void Game::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if (event->buttons() == Qt::LeftButton )
{
text->setPlainText("X");
text->setFont(QFont("Tahoma",24));
text->setPos((160+160+120)/2,140);
scenc->addItem(text);
}
}
в игре.ч:
class Game : public QObject , public QGraphicsRectItem
{
Q_OBJECT
public:
Game();
QGraphicsScene *scenc;
QGraphicsView *view;
QGraphicsTextItem *text;
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
Game::mousePressEvent
никогда не вызывается, потому чтоGame
никогда не отображается. Ваш подход не очень хорош:Game
должен наследоваться отQGraphicsView
. См. примеры в документации Qt. - person Dimitry Ernot   schedule 26.07.2019