Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QSplashScreen未调用插槽_Qt_Qt4.8 - Fatal编程技术网

Qt QSplashScreen未调用插槽

Qt QSplashScreen未调用插槽,qt,qt4.8,Qt,Qt4.8,我正在尝试使用qsplashsscreen显示启动图像,我想显示图像大约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");

我正在尝试使用
qsplashsscreen
显示启动图像,我想显示图像大约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
出现几毫秒,然后消失。试图修改时间段,但似乎
qsplashsscreen
对象未连接到插槽。问题出在哪里?如何避免?

此代码应该可以工作:

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();
}
此代码应适用于:

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();
}

代码的问题是计时器没有阻止执行,因此启动屏幕已经通过
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();
}

代码的问题是计时器没有阻止执行,因此启动屏幕已经通过
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();
}

主窗口显示正常,但QSplashScreen仍不能正常工作,因为needswell主窗口显示正常,但QSplashScreen仍不能正常工作我认为在初始化完成后,最好让主窗口发出信号,然后将其连接到启动屏幕。我认为在初始化完成后,最好让主窗口发出一个信号,并将其连接到启动屏幕。