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

stormier 2012-01-20 01:50:35
主函数如下:
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;放到主函数外面编程全局变量也不行,这是怎么回事?应该怎么办?
...全文
590 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixiangxtu 2013-04-03
  • 打赏
  • 举报
回复
如何改变进度条的位置啊?谢谢
stormier 2012-01-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 timyan84 的回复:]

三个文件,蓝色的置顶有边框的进度条,左下角显示文字信息

// main.cc
C/C++ code

#include <QApplication>
#include <QMainWindow>
#include "splash_screen.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);……
[/Quote]

辛苦了!!非常感谢!春节快乐!!
xfig 2012-01-22
  • 打赏
  • 举报
回复
三个文件,蓝色的置顶有边框的进度条,左下角显示文字信息

// main.cc

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


// splash_screen.h

#ifndef _SPLASHSCREEN_H
#define _SPLASHSCREEN_H

#include <QSplashScreen>
#include <QProgressBar>
#include <QApplication>

class SplashScreen : public QSplashScreen
{
Q_OBJECT
public:
explicit SplashScreen(QApplication *app, const QPixmap &pix);
virtual ~SplashScreen();

void setCurrentProgress(int value);

public slots:

private slots:
void progressBarUpdated(int);

protected:
virtual void drawContents(QPainter *painter);

private:
QApplication *app;
QProgressBar *progressBar;
int currVal;
};

#endif // _SPLASHSCREEN_H


// splash_screen.cc

#include "splash_screen.h"

SplashScreen::SplashScreen(QApplication *app, const QPixmap &pix)
: QSplashScreen(pix) {
this->app = app;
progressBar = new QProgressBar;
progressBar->setAlignment(Qt::AlignHCenter);
progressBar->resize(640, 19);
progressBar->setRange(0, 100);
progressBar->setValue(0);
progressBar->setEnabled(true);
progressBar->setStyleSheet("QProgressBar:horizontal {border: 2px solid gray; border-radius: 3px; background: white;padding: 1px;} QProgressBar::chunk:horizontal {background: blue}");
connect(progressBar, SIGNAL(valueChanged(int)), this, SLOT(progressBarUpdated(int)));
}

SplashScreen::~SplashScreen()
{
}

void SplashScreen::setCurrentProgress(int value)
{
currVal = value;
progressBar->setValue(currVal);
}

void SplashScreen::progressBarUpdated(int)
{
this->repaint();
this->app->processEvents();
}

void SplashScreen::drawContents(QPainter *painter)
{
QSplashScreen::drawContents(painter);
progressBar->render(painter);
}
cddark 2012-01-21
  • 打赏
  • 举报
回复
然后在mainwindow.cpp里,mainwindow()构造函数里调用progressBar->setValue(i);不成功



你MainWindow都不知道progressBar的指针,怎么能用它的方法。。
stormier 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 timyan84 的回复:]

设计不合理么,至少,progressBar作为splashWindow的专有控件,应该封装进splashWindow的subclass中,提供一个setCurrentProgress之类的接口函数,再由主函数设置进度条位置
[/Quote]
嗯,你说的对,我刚看过不多的程序,没见过splash里加progressBar的示例,不知道你说的这个该怎么写,能给一下按你的方法做的代码吗?
xfig 2012-01-21
  • 打赏
  • 举报
回复
设计不合理么,至少,progressBar作为splashWindow的专有控件,应该封装进splashWindow的subclass中,提供一个setCurrentProgress之类的接口函数,再由主函数设置进度条位置
stormier 2012-01-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 livealearn 的回复:]

把splash窗口的指针传递给QProgressBar试试。
[/Quote]
这个是为什么?是在mainwindow里面没有progressBar啊,我做的mainwindow和splash没有父子关系…
三条猫 2012-01-20
  • 打赏
  • 举报
回复
把splash窗口的指针传递给QProgressBar试试。

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧