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或者其它组件,我不再多说,成功往往向着有准备的人。。。

Qt之模型/视图(自定义风格)的更多相关文章

  1. Qt之模型/视图(自定义进度条)

    简述 在之前的章节中分享过关于QHeaderView表头排序.添加复选框等内容,相信大家模型/视图.自定义风格有了一定的了解,下面我们来分享一个更常用的内容-自定义进度条. 实现方式: 从QAbstr ...

  2. Qt之模型/视图(委托)

    概念 不同于模型 - 视图 - 控制器模式,模型/视图设计不包括用于管理与用户交互的一个完全独立的组件.一般情况,视图负责将模型数据呈现给用户以及处理用户输入.为了输入更加具有灵活性,则由委托来执行交 ...

  3. 【转】Qt之模型/视图

    [本文转自]http://blog.sina.com.cn/s/blog_a6fb6cc90101hh20.html   作者: 一去丶二三里 关于Qt中MVC的介绍与使用,助手中有一节模型/视图编程 ...

  4. QT MVC 模型/视图

    1. 模型视图实例一, QFileSystemModel  QTreeView ,model/view示例. #include <QApplication> #include <QF ...

  5. Qt之模型/视图(实时更新数据)

    上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变的,那么如何实时更新成了一个很重要的问题!功能:(1)添加委托 ...

  6. Qt之模型/视图(自定义按钮)

    简述 衍伸前面的章节,我们对QTableView实现了数据显示.自定义排序.显示复选框.进度条等功能的实现,本节主要针对自定义按钮进行讲解,这节过后,也希望大家对自定义有更深入的了解,在以后的功能开发 ...

  7. Qt 之模型/视图(自定义按钮)

    https://blog.csdn.net/liang19890820/article/details/50974059 简述 衍伸前面的章节,我们对QTableView实现了数据显示.自定义排序.显 ...

  8. Qt之模型/视图(自定义按钮)(使用QStyleOption的子类进行drawControl,和我用的方法完全不一样)

    http://blog.csdn.net/liang19890820/article/details/50974059

  9. Qt之模型/视图(自定义按钮)(重绘QStyleOptionButton)

    http://blog.csdn.net/liang19890820/article/details/50974059#comments

随机推荐

  1. Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

    相信通过Jerry的前一篇文章 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用,想必大家对Restful ABAP Programming模型已经有 ...

  2. Javascript的异步与单线程

    一.前言 我们都知道,javasript是一个单线程的语言:所谓单线程就是同一时间不能做两件事情,两段代码不能同时执行:因为这种机制,才避免了两段js同时对一个DOM节点进行渲染的冲突.但是也会因此产 ...

  3. Swagger 接口文档规范

    导语: 相信无论是前端还是后端开发,都或多或少地被接口文档折磨过.前端经常抱怨后端给的接口文档与实际情况不一致.后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新.其实无论是前端调用后端,还是 ...

  4. Flutter——TabBar组件(顶部Tab切换组件)

    TabBar组件的常用属性: 属性 描述 tabs 显示的标签内容,一般使用 Tab 对象,也可以是其他的Widget  controller TabController 对象 isScrollabl ...

  5. FAILED: SemanticException Unable to determine if hdfs://tmaster:8020/user/root/words.db/test_t2 is encrypted

    使用hive时,建立数据库,建表,写数据: 读数据:select *  from test_t2; 报错SemanticException 原因:建表时使用了其他路径,或者在另一个路径的数据库(建立数 ...

  6. Linux下常用mysql命令【2】

    1.开启和关闭 1.1.开启 systemctl start mysqld 1.2.关闭 systemctl stop mysqld 1.3.重启 systemctl restart mysqld 回 ...

  7. Chkdsk /f 修复无法识别EXFAT卷文件系统

    Chkdsk 工具将错误地报告为损坏的 Windows 7 和 Windows Server 2008 R2 中 exFAT 卷文件系统 适用于: Windows Server 2008 R2 Ser ...

  8. charles 手机抓包设置

    本文参考:charles 抓包手机 charles经常会进行手机上的网页抓包,比如去copy别人网站图片或脚本的时候o(∩_∩)o : 手机抓包的原理,和PC类似,手机依靠charles与服务端进行对 ...

  9. 使用DateTimeFormatter替换线程不安全的SimpleDateFormat

    原文:https://blog.csdn.net/baofeidyz/article/details/81307478 如何让SimpleDateFormat保持安全运行? 方案一 每次都去new这种 ...

  10. 软件测试_Loadrunner_性能测试_脚本优化_关联_手动关联

    在写文章之前写一下自己的心路历程,录制脚本主要是上传图片并返回查询结果的过程.录制完脚本后发现函数中URl地址中有图片ID后台随机生成的32位随机数,并且每次上传图片id都会变化.我就上网搜索了一些解 ...