当前位置: 代码迷 >> QT开发 >> 在程序启动画面里加进度条在主窗口里面设置进度不成功怎么处理
  详细解决方案

在程序启动画面里加进度条在主窗口里面设置进度不成功怎么处理

热度:153   发布时间:2016-04-25 05:06:18.0
在程序启动画面里加进度条在主窗口里面设置进度不成功怎么办?
主函数如下:
int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  QPixmap pixmap(":/images/splash.JPG");
  QSplashScreen splash(pixmap);
  QGridLayout *layout = new QGridLayout( &splash );
  Qt::Alignment bottommiddle = Qt::AlignCenter | Qt::AlignBottom;
QProgressBar *progressBar= new QProgressBar;
  layout->addWidget(progressBar,0,0,bottommiddle );
  splash.show();
  app.processEvents();
  MainWindow *mainwindow = new MainWindow();
  mainwindow->show();
  splash.finish(mainwindow);
  return app.exec();
}
然后在mainwindow.cpp里,mainwindow()构造函数里调用progressBar->setValue(i);不成功,说progressBar没有调用,我把QProgressBar *progressBar= new QProgressBar;放到主函数外面编程全局变量也不行,这是怎么回事?应该怎么办?

------解决方案--------------------
把splash窗口的指针传递给QProgressBar试试。
------解决方案--------------------
三个文件,蓝色的置顶有边框的进度条,左下角显示文字信息

// main.cc
C/C++ code
#include <QApplication>#include <QMainWindow>#include "splash_screen.h"int main(int argc, char *argv[]){    QApplication app(argc, argv);    // 设置splash图片并传入主进程指针,用于更新event loop    SplashScreen *splashWindow = new SplashScreen(&app, QPixmap("./foo.png"));    splashWindow->show();    app.processEvents();    // 每隔1秒钟更新一步    int waitSecond = 1;    // 设置10步    int waitStep = 10;    for(int i = 0; i < waitStep; i ++) {        splashWindow->setCurrentProgress(i*100/waitStep);        splashWindow->showMessage("step " + QString().number(i*100/waitStep),                                  Qt::AlignBottom);        sleep(waitSecond);    }    QMainWindow window;    window.show();    splashWindow->finish(&window);    return app.exec();}
  相关解决方案