#include
"trackdelegate.h" TrackDelegate::TrackDelegate(
int durationColumn, QObject *parent)
: QStyledItemDelegate(parent)
{
this->durationColumn = durationColumn;
}
void TrackDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index)
const {
if (index.column() == durationColumn) {
int secs = index.model()->data(index, Qt::DisplayRole).toInt();
QString text = QString(
"%1:%2").arg(secs / 60, 2, 10, QChar('0')).arg(secs % 60, 2, 10, QChar('0'));
QTextOption o(Qt::AlignRight | Qt::AlignVCenter);
painter->drawText(option.rect, text, o);
}
else {
QStyledItemDelegate::paint(painter, option, index);
}
}
QWidget *TrackDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index)
const {
if (index.column() == durationColumn) {
QTimeEdit *timeEdit =
new QTimeEdit(parent);
timeEdit->setDisplayFormat(
"mm:ss");
connect(timeEdit, SIGNAL(editingFinished()),
this, SLOT(commitAndCloseEditor()));
return timeEdit;
}
else {
return QStyledItemDelegate::createEditor(parent, option, index);
}
}
void TrackDelegate::commitAndCloseEditor()
{
QTimeEdit *editor = qobject_cast<QTimeEdit *>(sender());
emit commitData(editor);
emit closeEditor(editor);
}
void TrackDelegate::setEditorData(QWidget *editor,
const QModelIndex &index)
const {
if (index.column() == durationColumn) {
int secs = index.model()->data(index, Qt::DisplayRole).toInt();
QTimeEdit *timeEdit = qobject_cast<QTimeEdit *>(editor);
timeEdit->setTime(QTime(0, secs / 60, secs % 60));
}
else {
QStyledItemDelegate::setEditorData(editor, index);
}
}
void TrackDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index)
const {
if (index.column() == durationColumn) {
QTimeEdit *timeEdit = qobject_cast<QTimeEdit *>(editor);
QTime time = timeEdit->time();
int secs = (time.minute() * 60) + time.second();
model->setData(index, secs);
}
else {
QStyledItemDelegate::setModelData(editor, model, index);
}
}
相关推荐
我们在之前写的[《QT(7)-初识委托》](https://blog.csdn.net/qq_40666149/article/details/128674837)文章末尾提到,***“使用一个类继承QStyledItemDelegate实现常用的控件委托,在使用时可以直接调用接口,灵活...
效果看https://blog.csdn.net/Sakuya__/article/details/88895498。使用自定义委托实现在TableView中添加Combobox、Spainbox、CheckBox控件。
本原理在CSDN IT1995 博客有详细说明。
该工程使用vs2010编译,实现windows先文件夹指定类型扫描,以及扫描到的文件界面展示。主要涉及到Qt托管类的使用方法,以及自定义tableview和model的实现方法。
qtableview 自定义委托 checkbox,进度条、时间等控件
使用Qt框架,自定义实现QListView的模型和委托,针对特定需求会有一定的帮助性
Qt 自定义Checkbox和QColorDialog 颜色调试框委托 Qt 自定义Checkbox和QColorDialog 颜色调试框委托 Qt 自定义Checkbox和QColorDialog 颜色调试框委托
48. QSortFilterProxyModel 49. 自定义只读模型 50. 自定义可编辑模型 51. 布尔表达式树模型 52. 使用拖放 53. 自定义拖放数据 54. 剪贴板 55. 数据库操作 56. 使用模型操作数据库 57. 可视化显示数据库数据 58. ...
QT自定义模型Modle的实现实例和自定义委托Delegate的实现实例以及在QTableView中加载使用的实现
关于自定义风格是针对视图与委托而言的,使用事件与QSS都可以进行处理
基于最新的Qt5.0.1的学习书籍,非常适合QT5的入门学习。 目录 1. 序 2. Qt 前言 3. Hello, world! 4. 信号槽 5. 自定义信号槽 6. Qt 模块简介 7. MainWindow 简介 8. 添加动作 9. 资源文件 10. 对象模型 11. 布局...
包括实现文件、基本配置文件、和简单的图片,使用Qt模型视图委托方法进行实现树状导航栏,重要地方都已经加了注释,可以看看我的博客里面介绍了实现
QT自定义委托类代理类.rar https://blog.csdn.net/txwtech/article/details/127177732?spm=1001.2014.3001.5501
QT TableView自定义委托-附件资源
详细介绍QTreeView的使用, 包括:模型/视图,自定义委托、自定义样式等操作 以及无边框界面的拖拽等操作!
自定义QML中的TableView的数据表现样式,主要是对表格中每列的数据定义不同的表现形式,例如用单选框、ComBobox、进度条等形式对数据进行形象化的显示,对于熟悉TableView的使用有较大的帮助 ,本代码可以直接通过...
1. 一个类实现11种常用委托,使用灵活,可以直接将代码加入到自己的项目中,零耦合。 2. 复选框控件:可以居中,可以在点击的时候发送信号,在外部轻松获得数据。 3. 图标控件:可以指定某一种条件(<、>、=灯),...
自定义委托类,重写QItemDelegate中的5个函数并用于模型实例.