原文地址:Qt之模型/视图(自定义风格)作者:一去丶二三里
关于自定义风格是针对视图与委托而言的,使用事件与QSS都可以进行处理,今天关于美化的细节讲解一下。

先看下图:
先撇开界面的美观性(萝卜青菜,各有所爱),就现有的这些风格,使用QSS + Qt二维绘图已经绰绰有余了。当然,如何让界面更美观,这个没有什么捷径,我只能说一句:无他,唯手熟尔!基本功搞扎实了,实现起来就会游刃有余。。。
void DetailProgressBar::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const  
{  
QStyleOptionViewItem  view_option(option);  
if (view_option.state & QStyle::State_HasFocus) {  
view_option.state = view_option.state ^ QStyle::State_HasFocus;  
}
QStyledItemDelegate::paint(painter, view_option, index);  
if (index.column() == 1) {
const QAbstractItemModel *item_model = index.model();  
QModelIndex index1 = item_model->index(index.row(), 2, QModelIndex());
QString name = item_model->data(index1, Qt::DisplayRole).toString();
QModelIndex index2 = item_model->index(index.row(), 4, QModelIndex());
qint64 total_size = item_model->data(index2, Qt::DisplayRole).toLongLong();
QModelIndex index3 = item_model->index(index.row(), 5, QModelIndex());
double speed = item_model->data(index3, Qt::DisplayRole).toDouble();
QModelIndex index4 = item_model->index(index.row(), 3, QModelIndex());
qint64 size = item_model->data(index4, Qt::DisplayRole).toLongLong();
QString str_speed = Util::getSpeed(speed);
if(total_size <= 0)
total_size = 1;
double d_size = (size*1.0)/total_size;
QString q_size = QString::number(d_size, 'f', 2);   
qint64 progress = q_size.toDouble() * 100;
if(progress > 100)
{
progress = 100;
}
//设置进度条的风格  
QStyleOptionProgressBar  progress_bar_option;
progress_bar_option.textAlignment = Qt::AlignCenter;
progress_bar_option.rect = QRect(option.rect.x()+5, option.rect.y()+option.rect.height()-4-6,  option.rect.width()-20, 6);
progress_bar_option.minimum = 0;  
progress_bar_option.maximum = 100;  
progress_bar_option.progress = progress;
painter->drawText(QRect(option.rect.x()+5, option.rect.y()+4, option.rect.width(), 16), QString("%1").arg(name));
painter->drawText(QRect(option.rect.right()-50, option.rect.y()+4, option.rect.width(), 16), QString("%1").arg(str_speed));
QProgressBar progress_bar;
//绘制进度条  
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progress_bar_option, painter, &progress_bar);
}

1、进度条样式
QProgressBar{
border:none;
background:rgb(210, 225, 240);
border-radius:3px;
text-align:center;
}
QProgressBar::chunk {
background:rgb(60, 140, 220);
border-radius:3px;
}

2、进度条文本
最简单的可以直接通过QStyleOptionProgressBar的text属性来设置,还可以设置对齐方式等信息。 
也可以通过委托来绘制任何想要的内容,这里我通过QPainter的drawText来绘制文本,可以设置画刷、画笔等。
这里,我只做进度条的简单介绍,关于QTableView或者其它组件,我不再多说,成功往往向着有准备的人。。。
注:
    技术在于交流、沟通,转载请注明出处并保持作品的完整性。
    作者:╰☆奋斗ing❤孩子`  原文:http://blog.sina.com.cn/s/blog_a6fb6cc90101hhty.html。

[转载]Qt之模型/视图(自定义风格)_vortex_新浪博客相关推荐

  1. [转载]Qt之模型/视图(实时更新数据)_vortex_新浪博客

    原文地址:Qt之模型/视图(实时更新数据)作者:一去丶二三里 上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变 ...

  2. Qt 方式问题_vortex_新浪博客

    放下那些博客上的典例,我发现我真的什么都做不成,再加的那段日子我仅仅是做了一个写字板,便觉得有点小开心了,"不就是这么简单吗",呵呵,其实还真不是.我发现qt的类太多了,你很难去真 ...

  3. [转载]Qt之自定义界面(二)添加最小化、关闭按钮、添加背景_vortex_新浪博客...

    很棒的文章 原文地址:Qt之自定义界面(二)添加最小化.关闭按钮.添加背景作者:一去丶二三里 在进行自定义界面之后,Qt界面并不像我们想象的那么完美,也许与我们的预期大相径庭,但是不必心烦,这只不过是 ...

  4. [转载]Qt之鼠标样式_vortex_新浪博客

    原文地址:Qt之鼠标样式作者:一去丶二三里 Qt中可以自定义鼠标样式,无论是为了美观,还是遵从同行业标准,或者说是界面友好性都需要了解. 使用setCursor(Qt::CursorShape)来设置 ...

  5. [转载]Qt之解决中文乱码_vortex_新浪博客

    博主很给力 原文地址:Qt之解决中文乱码作者:一去二三里 在项目开发的过程中,中文乱码是比较常见的问题!用Qt开发也不例外,之前在做界面的时候没有发现什么问题,但是在程序移植的过程中问题出现了! 在W ...

  6. [转载]Qt之获取本机网络信息_vortex_新浪博客

    原文地址:Qt之获取本机网络信息作者:一去丶二三里 经常使用命令行来查看一些计算机的配置信息. 1.首先按住键盘上的"开始键+R键",然后在弹出的对话框中输入"CMD&q ...

  7. [转载]Qt之中文显示(QMessageBox、QLineEdit右键菜单等)_vortex_新浪博客

    原文地址:Qt之中文显示(QMessageBox.QLineEdit右键菜单等)作者:一去丶二三里 在编写Qt程序的时候,总会碰到中文问题,一直都很困惑,原本在使用QLineEdit的时候总会出现右键 ...

  8. Qt实现Areo效果_vortex_新浪博客

    发现Win7的Areo界面效果很好看,饶有兴致的百度了下Qt的实现方式,终于知道了简单的实现方式,以下简单介绍下. 官方地址:http://doc.qt.io/qt-5/examples-qtwine ...

  9. Qt文件打包_vortex_新浪博客

    转载链接:http://tieba.baidu.com/p/3730103947 传统文件的打包方式:​ 1. 先在release方式下生成model.exe文件,取出.exe文件放置空文件夹内(C: ...

最新文章

  1. 仿美团外卖的全栈项目(vue+node+mongodb)带支付-大三求实习
  2. 分析:Java的好处究竟在哪里?
  3. 最适合编程的10大字体推荐
  4. tomcat源码 Connector
  5. flutter引入高德地图_Flutter笔记-调用原生IOS高德地图sdk
  6. NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  7. LD_PRELOAD用法总结
  8. Java中 intValue,parseInt,Valueof 这三个关键字的区别
  9. Unity UGUI —— 鼠标穿透UI问题(Unity官方的解决方法)
  10. 【MATLAB统计分析与应用100例】案例015:matlab读取Excel数据,进行值聚类分析
  11. pixi 平铺精灵 demo (一)
  12. 斯坦福用算法降低:令欧洲头大的难民犯罪率
  13. 2017年10月19日 第十次总结
  14. GAN原理及简单mnist生成图片
  15. CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout
  16. 前端微信签名验证工具_微信支付服务商签名验证无误,但是统一下单后服务器返回【签名错误】...
  17. day1-C++学习
  18. Echarts插件中的data绑定一个变量,后面通过访问后端接口获取数据给这个变量,Echarts插件无法渲染数据
  19. 计算机无法识别读卡器怎么办,在win7电脑中识别不了读卡器的解决方法介绍
  20. GUID分区和MBR分区简介

热门文章

  1. 某8086cpu构成的微型计算机,微型计算机原理及应用试题及答案
  2. 如何处理不能复现的bug?软件测试工程师避坑指南
  3. loadrunner——关联
  4. ddt-TypeError: test_add_department_1() missing 3 required positional arguments
  5. SVN学习2020.8.9
  6. 还在担心漏测吗?快来使用jacoco统计下代码覆盖率
  7. 这些面试用例设计,你肯定遇到过(朋友圈、电梯、发红包、支付)
  8. 高中同窗被叫“码子”的!如今转行软件测试,不止是年轻,还有拼搏的勇气
  9. matlab电力系统潮流计算软件matpower_衡真课堂 | 电力系统稳态与暂态分析
  10. 机器学习实战—朴素贝叶斯及要点注解