当前位置: 首页 > news >正文

邵阳市网站建设_网站建设公司_服务器维护_seo优化

如何进行外贸网站建设,wordpress提醒用法,景观建筑人才网,建立网站后还要钱吗这是我对 Qt 的 model/view 内容理解的第二篇 blog#xff0c;在第一篇文章中#xff0c;介绍 QTableView 和 QAbstractTableModel#xff0c;实现显示了对数据源的显示#xff0c;但是显示的格式和修改的模式都是按照 View 控件的自显示方式。在此#xff0c;使用 Qt 自带…这是我对 Qt 的 model/view 内容理解的第二篇 blog在第一篇文章中介绍 QTableView 和 QAbstractTableModel实现显示了对数据源的显示但是显示的格式和修改的模式都是按照 View 控件的自显示方式。在此使用 Qt 自带的 QStyledItemDelegate 类实现对特定行 / 列的显示 / 修改模式实现实现过程中不出现对 item 的代码生成对 item 的生成由程序自动完成。 在此同样以《c gui programming with Qt4》中的 trackEditor 例子作一讲解。 在此我们首先应当考虑以下几个问题 1有一个代理类加到 View 中处理特定的 View 内容。 2代理类要完成以下几项工作a当用户修改数据时生成用户要求的控件用户每次修改数据时在相应的位置都会生成控件所以当控件用完后应 del 释放资源。b设置在生成的修改控件中显示的内容。c设置要写到 model 中的数据内容。d设置当结束修改数据后View 显示的内容。 在此我们需要实现以下 4 个类。 /** brief 保存显示数据的类。 */ class Track/** brief 继承的委托类。 */ class TrackDelegate : public QStyledItemDelegate/** brief 继承的模型类。 */ class TrackModel : public QAbstractTableModel/** brief 用于组装显示的控件类。 */ class TrackEditor : public QDialog 在此Track TrackModel TrackEditor 的功能在 Qt model/view 理解 1 中做过介绍在此只列出 code不再过多介绍。在此主要介绍 TrackDelegate。 Track h 文件 #ifndef TRACK_H #define TRACK_H#include QString/**projectName ItemViewauthor qiaoweidate 2018-12-22version 1.0description 保存的音频数据包括音频名称和时长 **/ class Track { public:explicit Track(const QString title , int duration 0);QString getTitle() const;void setTitle(const QString title);int getDuration() const;void setDuration(int duration);private:/**author qioaweidate 2018-12-22description 音频名称**/QString title_;/**author qioaweidate 2018-12-22description 音频时长单位秒**/int duration_; };#endif // TRACK_H Track.cpp #include track.hTrack::Track(const QString title, int duration) :title_(title),duration_(duration) {}QString Track::getTitle() const {return title_; }void Track::setTitle(const QString title) {title_ title; }int Track::getDuration() const {return duration_; }void Track::setDuration(int duration) {duration_ duration; } TrackModel.h #ifndef TRACKMODEL_H#define TRACKMODEL_H#include QWidget #include QAbstractTableModel #include QList #include track.h #include QObject/**brief 继承的模型类。 */ class TrackModel : public QAbstractTableModel {Q_OBJECTpublic:explicit TrackModel(QListTrack* tracks, QObject* parent 0);~TrackModel();virtual int rowCount(const QModelIndex parent) const;virtual int columnCount(const QModelIndex parent) const;virtual QVariant data(const QModelIndex index, int role) const;virtual bool setData(const QModelIndex index,const QVariant value,int role);virtual Qt::ItemFlags flags(const QModelIndex index) const;private:QListTrack* tracks; };#endif // TRACKMODEL_H TrackEditor h 文件 #ifndef TRACKEDITOR_H#define TRACKEDITOR_H#include QDialog#include track.hQT_BEGIN_NAMESPACE class QTableView; class TrackModel; class QAbstractTableModel; QT_END_NAMESPACEnamespace Ui { class TrackEditor; }/**brief 用于组装显示的控件类。 */ class TrackEditor : public QDialog {Q_OBJECTpublic:explicit TrackEditor(QListTrack* tracks, QWidget *parent 0);~TrackEditor();private:Ui::TrackEditor *ui;QTableView* tableView;TrackModel* model;//QAbstractTableModel* model; };#endif // TRACKEDITOR_H TrackDelegate h 文件 #ifndef TRACKDELEGATE_H#define TRACKDELEGATE_H#include QObject #include QStyledItemDelegateQT_BEGIN_NAMESPACE class QPainter; QT_END_NAMESPACE/**brief 继承的委托类。 */ class TrackDelegate : public QStyledItemDelegate { public:explicit TrackDelegate(QObject* parent 0);~TrackDelegate();virtual QWidget* createEditor(QWidget *parent,const QStyleOptionViewItem option,const QModelIndex index) const;virtual void setEditorData(QWidget* parent,const QModelIndex index) const;virtual void setModelData(QWidget* editor,QAbstractItemModel* model,const QModelIndex index) const;virtual void updateEditorGeometry(QWidget* editor,const QStyleOptionViewItem option,const QModelIndex index) const;virtual void paint(QPainter* painter,const QStyleOptionViewItem option,const QModelIndex index) const;virtual QSize sizeHint(const QStyleOptionViewItem option,const QModelIndex index) const;private:bool isRightColumn(const QModelIndex index, const int column) const; private slots:void commitAndCloseEditor();private:static const int columnNumber; };#endif // TRACKDELEGATE_H TrackDelegate cpp 文件 #include trackdelegate.h #include QTimeEdit #include QPainter #include QApplication#include trackmodel.hconst int TrackDelegate::columnNumber 1;TrackDelegate::TrackDelegate(QObject* parent) :QStyledItemDelegate(parent) {}TrackDelegate::~TrackDelegate() {}QWidget* TrackDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem option,const QModelIndex index) const {if (isRightColumn(index, TrackDelegate::columnNumber)) {QTimeEdit *timeEdit new QTimeEdit(parent);timeEdit-setDisplayFormat(hh:mm);//当控件结束编辑内容时触发释放资源connect(timeEdit, QTimeEdit::editingFinished,this, TrackDelegate::commitAndCloseEditor);//int secs index.model()-data(index, Qt::DisplayRole).toInt();int secs index.model()-data(index, Qt::EditRole).toInt();QTime time(secs / 60, secs % 60);timeEdit-setTime(time);return timeEdit;} else {return QStyledItemDelegate::createEditor(parent,option,index);} }void TrackDelegate::setEditorData(QWidget *editor, const QModelIndex index) const {if ( !index.isValid()) {return;}QTimeEdit* timeEditor qobject_castQTimeEdit*(editor);if ( !timeEditor) {return;}if (isRightColumn(index, TrackDelegate::columnNumber)) {int secs index.model()-data(index, Qt::EditRole).toInt();QTime time(secs / 60, secs % 60);timeEditor-setTime(time);} else {QStyledItemDelegate::setEditorData(editor, index);} }void TrackDelegate::setModelData(QWidget *editor,QAbstractItemModel *model,const QModelIndex index) const {if ( !index.isValid()) {return;}QTimeEdit* timeEditor qobject_castQTimeEdit*(editor);if ( !timeEditor) {return;}if (isRightColumn(index, TrackDelegate::columnNumber)) {QTime time timeEditor-time();int secs time.hour() * 60 time.minute()model-setData(index, secs, Qt::EditRole);} else {QStyledItemDelegate::setModelData(editor,model,index);} }void TrackDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem option,const QModelIndex index) const {Q_UNUSED(index);editor-setGeometry(option.rect); }void TrackDelegate::paint(QPainter *painter,const QStyleOptionViewItem option,const QModelIndex index) const {if (isRightColumn(index, TrackDelegate::columnNumber)) {int secs index.model()-data(index, Qt::EditRole).toInt();QString text QString(%1:%2).arg(secs / 60, 2, 10, QChar(0)).arg(secs % 60, 2, 10, QChar(0));//获取项风格设置QStyleOptionViewItem myOption option;myOption.displayAlignment Qt::AlignRight | Qt::AlignVCenter;painter-drawText(option.rect, text);} else {QStyledItemDelegate::paint(painter, option, index);} }QSize TrackDelegate::sizeHint(const QStyleOptionViewItem option,const QModelIndex index) const {return option.rect.size(); }void TrackDelegate::commitAndCloseEditor() {QTimeEdit* editor qobject_castQTimeEdit*(sender());emit commitData(editor);emit closeEditor(editor); }bool TrackDelegate::isRightColumn(const QModelIndex index,const int column) const {if ( !index.isValid()) {return false;}if (index.column() column) {return true;} else {return false;} } createEditor 用于创建用户自己需要的显示数据控件。 setEditorData 用于设置显示控件中显示的具体数据信息。 setModelData 用户设置模型的数据也可理解为当显示的数据发生变化后用户 update 模型数据保持显示 / 储存内容一致。 paint 由用户自己绘制要显示的内容信息很重要当你点击时间框修改时间要改的内容为原显示内容并允许你修改而不是数据变为 00:00让你修改。 commitAndCloseEditor 创建关于 commitData 和 closeEditor 的信号槽链接保证当代理控件的数据修改完成后释放信号保存数据保存数据步骤由系统自动完成。 在此要求注意内容 在 TrackModel 类中的 setData 方法应当注意data 的值应从 value 得出而不是通过 model 的 data 得出model 得出的数据是原来保存的而不是用户修改的。
http://www.lebaoying.cn/news/93728.html

相关文章:

  • 互联网专线做网站怎么做数据新泰网站建设
  • 广州网站排名优化公司标志设计论文
  • 最新军事新闻头条重大seo云优化外包
  • 兰州网站建设|兰州网站制作|兰州网站设计公司|兰州网络公司青岛网站建设方案策划
  • 网站设计概述500字中国动漫影视培训网站源码
  • 国家和城乡建设部网站wordpress gateway
  • 网站建设 中企动力中山Wordpress校内优化
  • 零食铺网站建设策划书wordpress 建站 搜索
  • 建站公司 转型经验一起做网店17网
  • 文案网站策划书站群管理系统cms
  • 重庆做网站需要多少钱打广告专用图
  • 如何提高网站文章收录whois域名查询官网
  • 网站建设宣传资料永川区网站建设咨询
  • 湖南自考网站建设与管理我们不是做网站的
  • 公司制作网站wap网站制作
  • 电子商务网站设计实验报告商务网站欣赏
  • 做设计兼职网站jsp页面如何做网站pv统计
  • php整站开发 企业网站教程做网站淘汰了
  • 怎么 网站 wordpress沈阳电子商务网站建设
  • 建筑网站推荐个人网站建设方法和过程
  • 做网站济南西现在做个企业网站一般多少钱
  • 百度网站关键词和网址电商系统平台
  • 什么免费网站可以链接域名三亚网站运营托管介绍
  • 网站为什么要seo网站怎么做播放窗口
  • 西安网站建设新闻企业做网站能赚钱么
  • 建设工程资料下载网站wordpress读取txt
  • 国外网站博客网站也可以做引流邯郸网站设计怎么用
  • 哪个网站平面设计做的好快速收录网站内页
  • 昆明做网站建设价位和女人做的电影网站
  • 网站左边logo图标怎么做销售类wordpress