[转载]Qt之模型/视图(自定义风格)
2015-09-13 14:32
375 查看
版权声明: https://blog.csdn.net/weixin_35494590/article/details/80616978
原文地址: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。 阅读更多
先撇开界面的美观性(萝卜青菜,各有所爱),就现有的这些风格,使用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之模型/视图(自定义风格)
- Qt之模型/视图(自定义风格)
- Qt之模型/视图(自定义风格)
- Qt之模型/视图(自定义风格)
- Qt之模型/视图(自定义按钮)(重绘QStyleOptionButton)
- Qt学习:项视图类之自定义模型
- Qt之模型/视图(自定义按钮)
- Qt之模型/视图(自定义按钮)(使用QStyleOption的子类进行drawControl,和我用的方法完全不一样)
- Qt之模型/视图(自定义按钮)
- Qt之模型/视图(自定义按钮)
- Qt之模型/视图(自定义进度条)
- Qt之模型/视图(自定义进度条)
- Qt 之模型/视图(自定义按钮)
- OpenGL模型视图变换、投影变换、视口变换(转载)
- Qt模型视图架构中关键类的文档链接
- Qt之模型/视图
- Qt-模型和视图的学习
- [转载]MVC之父对“模型-视图-控制器”的最初定义
- Qt实现自定义按钮的三态效果(转载自http://www.cnblogs.com/emouse/archive/2013/07/14/3189319.html)
- Qt的模型/视图编程方法(model/view programming)