- 浏览: 767922 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
.h
.cpp
main.cpp
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include <QItemDelegate> class QTableWidget; class QItemDelegate; class QStyleOptionViewItem; class QModelIndex; class QAbstractItemModel; class Track{ public: explicit Track(const QString& title="",int duration=0){ } QString title; int duration; }; class TrackEditor:public QDialog{ Q_OBJECT public: explicit TrackEditor(QList<Track> *tracks,QWidget* parent=NULL); private: QList<Track> *tracks; QTableWidget* tableWidget; }; class TrackDelegate:public QItemDelegate{ Q_OBJECT public: TrackDelegate(int durationColumn,QObject *parent=0); void paint(QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex& index)const; QWidget *createEditor(QWidget* parent, const QStyleOptionViewItem &option, const QModelIndex &index)const; void setEditorData(QWidget* editor,const QModelIndex &index)const; void setModelData(QWidget* editor,QAbstractItemModel *model, const QModelIndex &index)const; private slots: void commitAndCloseEditor(); private: int duration; }; #endif // DIALOG_H
.cpp
#include "dialog.h" #include <QTableWidget> #include <QItemDelegate> #include <QStyleOptionViewItem> #include <QModelIndex> #include <QTimeEdit> #include <QVBoxLayout> TrackEditor::TrackEditor(QList<Track> *tracks, QWidget *parent) :QDialog(parent) { this->tracks = tracks; tableWidget = new QTableWidget(tracks->count(),2); tableWidget->setItemDelegate(new TrackDelegate(1)); tableWidget->setHorizontalHeaderLabels( QStringList()<<tr("Track")<<tr("Duration")); for(int row=0;row<tracks->count();++row){ Track track = tracks->at(row); QTableWidgetItem *item0 = new QTableWidgetItem(track.title); tableWidget->setItem(row,0,item0); QTableWidgetItem *item1 = new QTableWidgetItem( QString::number(track.duration)); item1->setTextAlignment(Qt::AlignRight); tableWidget->setItem(row,1,item1); } QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(tableWidget); setLayout(layout); } TrackDelegate::TrackDelegate(int durationColumn, QObject *parent) :QItemDelegate(parent) { this->duration = durationColumn; } void TrackDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if(index.column()==duration){ int secs = index.model()->data(index,Qt::DisplayRole).toInt(); QString text = QString("%1:%2").arg(secs/60,2,10,QChar('0')) .arg(secs%60,20,10,QChar('0')); QStyleOptionViewItem myOption = option; myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter; drawDisplay(painter,myOption,myOption.rect,text); drawFocus(painter,myOption,myOption.rect); }else{ QItemDelegate::paint(painter,option,index); } } QWidget *TrackDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { if(index.column()==duration){ QTimeEdit *timeEdit = new QTimeEdit(parent); timeEdit->setDisplayFormat("mm:ss"); connect(timeEdit,SIGNAL(editingFinished()),this,SLOT(commitAndCloseEditor())); return timeEdit; }else{ return QItemDelegate::createEditor(parent,option,index); } } void TrackDelegate::commitAndCloseEditor() { QTimeEdit *edit = qobject_cast<QTimeEdit *>(sender()); emit commitData(edit); emit closeEditor(edit); } void TrackDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { if(index.column()==duration){ int secs = index.model()->data(index,Qt::DisplayRole).toInt(); QTimeEdit *timeEdit = qobject_cast<QTimeEdit *>(editor); timeEdit->setTime(QTime(0,secs/60,secs%60)); }else{ QItemDelegate::setEditorData(editor,index); } } void TrackDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { if(index.column()==duration){ QTimeEdit *timeEdit = qobject_cast<QTimeEdit *>(editor); QTime time = timeEdit->time(); int secs = (time.minute()*60)+time.second(); model->setData(index,secs); }else{ QItemDelegate::setModelData(editor,model,index); } }
main.cpp
#include <QtGui/QApplication> #include "dialog.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); QList<Track> list; for(int i=0;i<10;i++){ list.push_back(Track(QString("title%1").arg(i),10)); } TrackEditor w(&list); w.show(); return a.exec(); }
发表评论
-
mac无法debug
2019-09-23 17:36 257升级新的lldb,底层脚本用的py3,而qtcreator暂不 ... -
现有项目生成pro文件
2018-07-21 15:32 1283qmake -project -
QtCreator使用arm编译器
2014-04-18 16:19 1226构建工具链各种不和谐,心一狠,直接改最原始的配置文件 1.首 ... -
qtcreator c++11
2013-07-15 22:10 1385在.pro里面:QMAKE_CXXFLAGS += -std= ... -
qt webkit
2013-03-28 17:27 817arora是一个很不错的开源的浏览器,我说它不错并不见得它的性 ... -
qt profile
2012-05-29 17:04 5387这篇文章是我从360doc上转的,本来是要把转的url列出来的 ... -
QtConcurrent
2012-05-26 14:48 2024当我们想在一个或多个辅助线程执行的同时做一些后台处理且无须使用 ... -
QThreadPool
2012-05-23 22:24 2205#include<QThreadPool> ... -
用qtcreator但不用qt库
2012-04-17 10:48 1318pro file: QT -= core gui -
qtcreator缺少编码
2012-04-14 13:46 877将plugins/codecs复制到yourcreator/b ... -
QTableView显示tooltip与设置日志
2012-01-11 22:15 3674原文http://www.cppblog.com/biao/a ... -
Qt mysql相关
2011-11-28 23:44 1793sudo apt-get install mysql-serv ... -
Qt自定义事件
2011-08-31 14:48 5315先看下官方的文档:(google translation) Q ... -
QComboBox下拉item变灰
2011-07-21 10:10 1947qobject_cast<QStandardItemMo ... -
Qt国际化
2011-07-21 09:37 9741.先在.pro中加入一行:TRANSLATIONS = xx ... -
Qt读写xml
2011-07-20 10:49 6465test.xml <?xml version=&qu ... -
Qt多线程
2011-07-18 21:08 1455Qt中线程安全的类有QMutex,QMutexLocker,Q ... -
生产者与消费者
2011-07-16 09:42 2#include<iostream> #in ... -
Qt读写二进制文件
2011-07-11 22:11 5680DataStream.h #ifndef DATASTRE ... -
Qt的文本文件读写
2011-07-02 17:00 3263mainwindow.h #ifndef MAINWIND ...
相关推荐
在本例"基于QItemDelegate的例子2 trackeEditorDelegate"中,我们将深入探讨如何使用QItemDelegate来创建一个定制的编辑器,以便在表格视图中编辑特定类型的数据显示。 首先,QItemDelegate是一个抽象类,它提供了...
在Qt中,代理(QItemDelegate)和委托(QSortFilterProxyModel)是两个关键概念,它们对于实现复杂的数据显示和交互功能至关重要。本文将深入探讨这两个概念,并结合自定义开关控件进行讲解。 首先,让我们了解...
`QItemDelegate`是QT提供的一种基础委托类,我们可以基于它进行扩展,以适应各种特定的需求。 在"Delegates.7z"这个压缩包中,提供的是一系列使用`QT`中的`Delegates`的实例代码。这些代码涵盖了多种编辑方式,包括...
而`QItemDelegate`是Qt提供的一种机制,允许我们自定义`QTableView`中的每一项(item)的显示和编辑方式。在`TableViewDelegate.zip`这个压缩包中,很显然包含的是关于如何使用`QItemDelegate`来自定义`QTableView`...
这通常通过实现`QItemDelegate`来完成。`QItemDelegate`是Qt中的一个委托类,用于定制`QAbstractItemView`子类中每一项的显示和编辑行为。 本实例代码将展示如何在`QTableView`的单元格中添加控件。首先,我们需要...
然而,有时我们需要对默认的功能进行扩展,例如自定义表头的行为或外观,这就需要用到QHeaderView和QItemDelegate。 QHeaderView是QTableView的一部分,它负责显示表格的行或列头。默认情况下,QHeaderView提供了...
"Qt ModelView 演示"项目着重展示了`QItemDelegate`的使用,这是一个关键组件,允许我们对QTableView、QListView和QTreeView等视图组件进行自定义渲染和编辑行为。 首先,我们要理解Qt的Model/View编程模型。该模型...
`QItemDelegate`是Qt提供的一种机制,允许我们为`QTableView`、`QListView`和`QTreeView`等组件中的每个项定义自己的显示和编辑行为。通过继承`QItemDelegate`并重写其关键方法,我们可以实现高度自定义的界面效果。...
如果你只需要修改默认的显示方式,而不需要复杂的编辑功能,QItemDelegate可能是更好的选择。例如,我们可以通过重写displayText()方法来改变文本的显示方式: ```cpp class CustomItemDelegate : public ...
本文将深入探讨如何创建自定义委托类,以及如何重写`QItemDelegate`中的关键函数来实现特定功能。 1. **理解QItemDelegate** `QItemDelegate`是Qt中的一个类,它是模型视图架构的一部分。它的主要职责是代表模型中...
在QT中,"委托类"(QItemDelegate)与"代理类"(QAbstractItemView)是数据展示的核心组件,特别是在处理表格(QTableView)、列表(QListView)和树形视图(QTreeView)时。本压缩包文件"QT自定义委托类代理类.rar...
当我们想要扩展其功能,如在单元格中添加一个进度条,就需要创建一个自定义的代理类,继承自`QItemDelegate`。 创建自定义代理类: ```cpp class ProgressDelegate : public QItemDelegate { Q_OBJECT public: ...
7. **自定义单元格编辑器**:若需定制单元格编辑器,可以重写QStyledItemDelegate或使用QItemDelegate子类。例如,创建一个只允许输入数字的编辑器: ```cpp class NumericDelegate : public QItemDelegate { Q_...
然而,简单基础部件的委托可以继承QItemDelegate而不是QAbstractItemDelegate,并使用这些函数的默认实现。 委托编辑器可以通过使用小工具来管理编辑过程或直接处理事件来实现。 使用现有委托 Qt提供的标准视图中...
简单基础部件的委托可以继承QItemDelegate,并使用这些函数的默认实现,委托编辑器可以通过使用小工具来管理编辑过程或直接处理事件来实现。 使用Delegate的原因:Qt中当用到QTreeView和QTableView等用于显示item的...
代理(QItemDelegate)是Qt中的一个重要概念,用于自定义视图中项的显示和编辑行为。 首先,QTreeView允许用户通过自定义模型(如QFileSystemModel、QStandardItemModel)来展示数据。模型是数据的源,视图是数据...
自定义代理通常继承自QItemDelegate,并重写其关键方法,例如paint()来绘制视图中的单元格,sizeHint()来指定单元格的大小,以及editorEvent()和setModelData()来处理编辑操作。 3. **paint()方法** paint()方法...
实现复选框功能,你需要创建一个自定义的QItemDelegate,覆盖`paint`和`editorEvent`方法。`paint`方法用来绘制复选框,`editorEvent`则处理用户的点击事件,更新模型数据。你还需要为每个树视图项添加一个额外的...
1. **创建自定义委托类**:继承QItemDelegate,并重写paint()方法以绘制自定义的单元格样式,以及editorEvent()或createEditor()方法来处理用户交互。 2. **设置委托**:在QTableView中使用setItemDelegate()方法将...
`QItemDelegate`允许自定义单元格的显示样式和编辑行为。通过重写`paint()`和`createEditor()`等方法,可以实现如颜色、图标、下拉列表等复杂效果。 8. **性能优化**: 对于大量数据,有效的缓存策略和懒加载技术...