请问如何修改QStyledItemDelegate中进度条的值???


在Qt QAbstractItemDelegate 类中,有一个例子 Package Manage

里面通过自定义委托,继承QStyledItemDelegate.,实现了绘制进度条显示数据的功能。

但是由于这里面的进度条是QStyleOptionProgressBar,不是一个Widget。

后期如果Model中的数据有变化,这些进度条的值如何随时更新变化呢?????





进度条例子

 void WidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                            const QModelIndex &index) const
 {
     if (index.column() == 1) {
         int progress = index.data().toInt();

         QStyleOptionProgressBar progressBarOption;
         progressBarOption.rect = option.rect;
         progressBarOption.minimum = 0;
         progressBarOption.maximum = 100;
         progressBarOption.progress = progress;
         progressBarOption.text = QString::number(progress) + "%";
         progressBarOption.textVisible = true;

         QApplication::style()->drawControl(QStyle::CE_ProgressBar,
                                            &progressBarOption, painter);
     } else
         QStyledItemDelegate::paint(painter, option, index);

9 个解决方案

#1


当他有变法的时候改变进度条的值不就可以了,进度条有一个serValue的方法可以设置进度。

#2


引用 1 楼  的回复:
当他有变法的时候改变进度条的值不就可以了,进度条有一个serValue的方法可以设置进度。


可是想改变值得时候,我已经获不到,那个控件对象了。因为它是绘制在上面的啊。

#3


你为什么不把它变成一个类的变量呢? 你是在paint里面做这样的事?难怪我说你的局部变量怎么可以一直显示在上面,真猛,你运行的时候看看你的CPU占用率高不高。

#4



         QStyleOptionProgressBar progressBarOption;

定义成全局变量。。。

#5


引用 3 楼  的回复:
你为什么不把它变成一个类的变量呢? 你是在paint里面做这样的事?难怪我说你的局部变量怎么可以一直显示在上面,真猛,你运行的时候看看你的CPU占用率高不高。



一个表格中,要绘制一列的进度条。一个成员变量解决不了吧,至少也应该申请一个QList<QStyleOptionProgressBar  *>把每个进度条对象指针,存着。

#6


引用 4 楼  的回复:
         QStyleOptionProgressBar progressBarOption;

定义成全局变量。。。



定义成全局变量,是走弯路了。

Qt 的MVC架构已经完成了我说的这个功能,是我的返回值写错了。
这个日志上,有一个完整的说明
http://qimo601.iteye.com/blog/1544843

#7


引用 6 楼  的回复:
引用 4 楼 的回复:
QStyleOptionProgressBar progressBarOption;

定义成全局变量。。。



定义成全局变量,是走弯路了。

Qt 的MVC架构已经完成了我说的这个功能,是我的返回值写错了。
这个日志上,有一个完整的说明
http://qimo601.iteye.com/blog/1544843

那我问你,你在paint里面定义了一个局部的进度条,等于在paint里面一直创建对象,除了paint又要析构对象,这样做合理?

#8


引用 6 楼  的回复:
引用 4 楼 的回复:
QStyleOptionProgressBar progressBarOption;

定义成全局变量。。。



定义成全局变量,是走弯路了。

Qt 的MVC架构已经完成了我说的这个功能,是我的返回值写错了。
这个日志上,有一个完整的说明
http://qimo601.iteye.com/blog/1544843

至于你发的这个网站他的做法我觉得更加不可思议,一直在QStyleOptionProgressBarV2 * progressBarOption = new QStyleOptionProgressBarV2();没看到什么地方delete掉,难道drawControl这个方法会自动删除?我去看看文档。。

#9


引用 8 楼  的回复:
引用 6 楼  的回复:
引用 4 楼 的回复:
QStyleOptionProgressBar progressBarOption;

定义成全局变量。。。



定义成全局变量,是走弯路了。

Qt 的MVC架构已经完成了我说的这个功能,是我的返回值写错了。
这个日志上,有一个完整的说明
http://qimo601.iteye.com/blog/1544843

……


哥们,你说的在理。
源代码是这样绘制的,不需要new一个对象。局部变量引用即可,paint完即可释放掉。


           void WidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                            const QModelIndex &index) const
 {
     if (index.column() == 1) {
         int progress = index.data().toInt();

         QStyleOptionProgressBar progressBarOption;
         progressBarOption.rect = option.rect;
         progressBarOption.minimum = 0;
         progressBarOption.maximum = 100;
         progressBarOption.progress = progress;
         progressBarOption.text = QString::number(progress) + "%";
         progressBarOption.textVisible = true;

         QApplication::style()->drawControl(QStyle::CE_ProgressBar,
                                            &progressBarOption, painter);
     } else
         QStyledItemDelegate::paint(painter, option, index);
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告