Показать основные окна после заставки в C ++ - QT - PullRequest
0 голосов
/ 01 января 2019

У меня есть приложение с заставкой.Мне нужно показать заставку до появления главного окна и подождать 3,5 секунды.Как только это закончилось, теперь мне нужно показать главное окно.

Вот код, который я пробовал,

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimer>
#include "game.h"
#include "player.h"
#include <QSplashScreen>
#include <QObject>


Game *game;

int main(int argc, char *argv[])

{
    //Splash screen
    QApplication a(argc, argv);
    QSplashScreen *splash = new QSplashScreen;
    splash->setPixmap(QPixmap(":/images/Images/1.JPG"));
    splash->show();

    //main window
    game = new Game();

    QTimer::singleShot(3500, splash, SLOT(close()));

    QTimer::singleShot(3500, game, SLOT(show()));

    game->displayHome();
    return a.exec();
}

Класс игры

Game::Game(QWidget *parent)
{

    scene = new QGraphicsScene();
    scene->setSceneRect(0,0,800,600);
    setBackgroundBrush(QBrush(QImage("img.png")));

    setScene(scene);
    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setFixedSize(800,600);

    show();
     qDebug() << "yoyoyoy";

     score = new Score();
    health = new Health();


    connect(this->health,SIGNAL(crash()),this,SLOT(gameover3()));
}

void Game::displayHome()
{
    logo = new Logo();
    scene->addItem(logo);

    playButton = new Menubuttons(QString("Play"));
    int bxPos = this->width()/2 - playButton->boundingRect().width()/2;
    int byPos = 275;
    playButton->setPos(bxPos,byPos);
    connect(playButton,SIGNAL(clicked()),this,SLOT(startGame()));
    scene->addItem(playButton);

    instructions = new Menubuttons(QString("Instructions"));
    int axPos = this->width()/2 - instructions->boundingRect().width()/2;
    int ayPos = 350;
    instructions->setPos(axPos,ayPos);
    connect(instructions,SIGNAL(clicked()),this,SLOT(instruct()));
    scene->addItem(instructions);

    quitButton = new Menubuttons(QString("Quit"));
    int qxPos = this->width()/2 - quitButton->boundingRect().width()/2;
    int qyPos = 425;
    quitButton->setPos(qxPos,qyPos);
    connect(quitButton,SIGNAL(clicked()),this,SLOT(close()));
    scene->addItem(quitButton);

    scene->removeItem(inst);
}

Но он появляется одновременно в обоих случаях.Как я могу это исправить?

1 Ответ

0 голосов
/ 01 января 2019

Поведение, которое вы описываете, не воспроизводится в приведенном ниже полном примере.

#include <QtWidgets/QApplication>
#include <qmainwindow.h>
#include <qwidget.h>
#include <qtimer.h>
#include <qsplashscreen.h>

QMainWindow* game;

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

    QSplashScreen *splash = new QSplashScreen;
    splash->setPixmap(QPixmap(":/StackOverflow/SplashScreen"));
    splash->show();

    game = new QMainWindow();       

    QTimer::singleShot(3500, splash, SLOT(close()));
    QTimer::singleShot(3500, game, SLOT(show()));

    return a.exec();
}

При запуске этого экрана в течение 3,5 секунд отображается заставка, за которым следует главное окно.Проблема может заключаться в вашей реализации класса Game или функции-члена displayHome().

Edit

После того, как вы отредактировали определение и реализацию класса Game, проблема яснавызывает show() в конце конструктора Game::Game().Это заставляет game отображаться сразу после создания, последующий вызов show() в QTimer::singleShot(3500, game, SLOT(show())) является избыточным для уже видимого объекта.Чтобы это исправить, просто удалите show() из конструктора Game, т.е. это должно быть

Game::Game(QWidget *parent)
{
    scene = new QGraphicsScene();
    scene->setSceneRect(0, 0, 800, 600);
    setBackgroundBrush(QBrush(QImage("img.png")));

    setScene(scene);
    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setFixedSize(800, 600);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...