进度条使用方法

xiaolomg 2012-10-06 06:31:07
Qt的进步条,跟MFC进度条用法大同小异吧;
我想在button_clicked事件执行的时候,同时弹出 进度条,进度条显示当前事件执行情况,当事件完成时进度条当然也100%了,这个应该如何设计呢?
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolomg 2012-10-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

Qt有一个机制叫做signal and slot,很容易使用,你读过以后大概就知道要怎么写了

随手写一些,没编译过
C/C++ code

void mainWindow::create_connection()
{
connect(button, SIGNAL(clicked()), this, SLOT(show_progress()) );
}

void mainWindo……
[/Quote]
Qt的论坛人气没有CSDN好,提的问题都木有人回答,不过还是谢啦 啊!
stereoMatching 2012-10-07
  • 打赏
  • 举报
回复
Qt有一个机制叫做signal and slot,很容易使用,你读过以后大概就知道要怎么写了

随手写一些,没编译过

void mainWindow::create_connection()
{
connect(button, SIGNAL(clicked()), this, SLOT(show_progress()) );
}

void mainWindow::show_progress()
{
download_progress_bar_->setValue(min);
download_progress_bar_->setRange(min, max);
download_progress_bar_->setVisible(true);

set_progress_value(); //你可以在这里设定你的进度条的进度
}


直接到Qt的专属论坛问会比较好
signal and slot让event driver的效果变得超级容易实现
xiaolomg 2012-10-06
  • 打赏
  • 举报
回复
看来如何定义进度是个问题,因为处理的事件的进度是不可预测的,看来我还是选用其他的控件吧,貌似那个加载的控件可以,不用显示当前进度。
virtualxmars 2012-10-06
  • 打赏
  • 举报
回复

class Progress {
virtual void onProgress(float value) = 0;
};

class ProgressPrinter : public Progress {
void onProgress(float value) {
cout<<"progress"<<value;
}
};

class Worker {
void doWork(Progress& progress) {
for (int i=1; i<=100; ++i) {
// do some calculation
progress->onProgress((float)i);
}
}
};

void button_clicked(...) {
Worker* worker = new Worker();
ProgressPrinter printer;
worker->doWork(printer);
}


这种C++接口范式中,使用一个纯虚类作为进度回调接口。具体的回调处理过程由实现了Progress接口的类来完成。在你的情况中,可以创建一个进度条窗口,并将它交给派生的进度通知对象。并在接到进度通知时,更新进度条读数。

与C范式不一样的是,C++的这种接口是可以具有状态的,例如进度条窗口就可以成为接口实现的状态。而C要实现这种能力则需要更多的工作量。
jixingzhong 2012-10-06
  • 打赏
  • 举报
回复
内容比较多,还是先看看资料吧:


在QT中可以用QProgressBar或着QProgressDialog来实现进度条:
http://www.cnblogs.com/feisky/archive/2010/06/17/1759654.html
virtualxmars 2012-10-06
  • 打赏
  • 举报
回复
这个主要使用回调的做法就可以了,大意就是,在你的工作方法中调用一个事先规定好的方法来通知外界工作进度是多少。例如:


// 回调方法接口定义
void (progressCallback)(float progress);

// 具体的回调方法
void progressPrint (float progress) {
cout<<"progress:"<<progress;
}

void doWork(progressCallback method) {
for (int i=1; i<=100; ++i) {
// do some calculation
method((float)i);
}
}

int main() {
doWork(progressPrint);
return 0;
}


则上述方法会在progressPrint方法中列印出1到100的进度

这是C的回调方法,如果使用C++,则定义一个回调接口类更符合oo思想

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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