没有调用QSplashScreen的插槽

时间:2012-03-09 17:56:44

标签: qt qt4.8

我正在尝试使用QSplashScreen显示启动图像,我想显示图像大约2秒钟。

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

    QApplication a(argc, argv);
    QPixmap pixmap(":/images/usm.png");
    QSplashScreen splash(pixmap);
    splash.show();
     splash.showMessage("Loading Processes");
    QTimer::singleShot(2000, &splash, SLOT(close()));
    MainWindow w;
      w.show();

    splash.finish(&w);
    return a.exec();
}

但这不起作用。 QSplashScreen出现几毫秒然后消失。试图修改时间段但似乎QSplashScreen对象没有连接到插槽。有什么问题以及如何避免它?

2 个答案:

答案 0 :(得分:4)

您的代码的问题是计时器没有阻止执行,因此启动屏幕已经通过splash.finish(&w)调用关闭。你需要的是一个睡眠。你可以使用这样的QWaitCondition

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSplashScreen splash(QPixmap(":/images/usm.png"));
    splash.show();
    splash.showMessage("Loading Processes");

    // Wait for 2 seconds
    QMutex dummyMutex;
    dummyMutex.lock();
    QWaitCondition waitCondition;
    waitCondition.wait(&dummyMutex, 2000);

    MainWindow w;
    w.show();

    splash.finish(&w);
    return a.exec();
}

这种方法的缺点是你阻止了执行。如果您不想阻止它,那么您只需删除 splash.finish(&w)电话:

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

    QApplication a(argc, argv);
    QPixmap pixmap(":/images/usm.png");
    QSplashScreen splash(pixmap);
    splash.show();
    splash.showMessage("Loading Processes");
    QTimer::singleShot(2000, &splash, SLOT(close()));
    MainWindow w;
    w.show();
    return a.exec();
}

答案 1 :(得分:1)

此代码应该有效:

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

    QSplashScreen splash(QPixmap(":/images/usm.png"));
    splash.showMessage("Loading Processes");
    splash->show();

    QMainWindow w;

    QTimer::singleShot(2000, splash, SLOT(close()));
    QTimer::singleShot(2500, &w, SLOT(show()));

    return a.exec();
}