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

色彩 导航网站企业网站建立的失败案例

色彩 导航网站,企业网站建立的失败案例,wordpress太占内存,阿里企业网站建设文章目录 1. 在便捷类中启用拖放2. 在模型/视图类中启用拖放 模型/视图框架支持Qt的拖放应用。 列表、表格和树中的项目可以在视图中被拖拽#xff0c;数据作为MIME编码的数据被导入和导出。标准视图可以自动支持内部的拖放。 默认视图的拖放功能并没有被启用#xff0c;如果… 文章目录 1. 在便捷类中启用拖放2. 在模型/视图类中启用拖放 模型/视图框架支持Qt的拖放应用。 列表、表格和树中的项目可以在视图中被拖拽数据作为MIME编码的数据被导入和导出。标准视图可以自动支持内部的拖放。 默认视图的拖放功能并没有被启用如果要进行项目的拖动就需要进行一些属性的设置。 如果在一个新的模型中启用拖放功能还需要重新实现一些函数。 1. 在便捷类中启用拖放 三个便捷类QListWidget、QTreeWidget、QTableWidget中每一种类型的项目都默认配置了一组不同的标志。 每一个QListWidgetItem和QTreeWidgetItem被初始化为可用的、可检查的、可选择的也可以用作拖放的源。每一个QTableWidgetItem可以被编辑和用作拖放操作的目标。 一般还需要在视图中设置一些属性来使它启用对拖放操作的内建支持 启用项目拖拽需要将视图的dragEnable属性设置为true要允许用户将内部或者外部的项目放入视图中需要设置视图的视口viewport()的acceptDrops属性为true要显示现在用户拖拽的项目将要被放置的位置需要设置showDropIndicator属性 如下 ////// 在视图项目中启用拖放功能///listWidget.setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); // 设置单选模式listWidget.setDragEnabled(true); // 启用拖拽listWidget.viewport()-setAcceptDrops(true); // 设置接受拖放listWidget.setDropIndicatorShown(true); // 设置显示将要被放置的位置listWidget.setDragDropMode(QListWidget::InternalMove); // 设置拖放模式为移动项目如果不设置默认为复制项目treeWidget.setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); // 设置单选模式treeWidget.setDragEnabled(true); // 启用拖拽treeWidget.viewport()-setAcceptDrops(true); // 设置接受拖放treeWidget.setDropIndicatorShown(true); // 设置显示将要被放置的位置treeWidget.setDragDropMode(QTreeWidget::InternalMove); // 设置拖放模式为移动项目如果不设置默认为复制项目tableWidget.setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); // 设置单选模式tableWidget.setDragEnabled(true); // 启用拖拽tableWidget.viewport()-setAcceptDrops(true); // 设置接受拖放tableWidget.setDropIndicatorShown(true); // 设置显示将要被放置的位置tableWidget.setDragDropMode(QTableWidget::InternalMove); // 设置拖放模式为移动项目如果不设置默认为复制项目2. 在模型/视图类中启用拖放 在视图中启用拖放功能与在便捷类中的设置相似。如下 ////// 模型/视图中启用拖放功能///listView-setSelectionMode(QAbstractItemView::SingleSelection); // 设置单选模式listView-setDragEnabled(true); // 启用拖放功能listView-setAcceptDrops(true); // 接受拖放listView-setDropIndicatorShown(true); // 显示要被放置的位置自定义模型中的flags()函数要提供对于拖放操作的支持即需要增加Qt::ItemIsDragEnabled和Qt::ItemIsDropEnabled标志。 由于视图中显示的数据是由模型控制的也要为使用的模型提供拖放操作的支持。需要重新实现一些必要的函数。如下 // 设置支持的拖拽动作Qt::DropActions supportedDropActions() const override;// 设置在拖放操作中导出的条目的数据的编码类型QStringList mimeTypes() const override;// 将拖放的数据放入QMimeData中QMimeData *mimeData(const QModelIndexList indexes) const override;// 将拖放操作的数据放入模型中bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex parent) override;这些函数的实现代码如下 /*设置支持使用拖放进行复制和移动两种操作*/ Qt::DropActions StringListModel::supportedDropActions() const {return Qt::CopyAction | Qt::MoveAction; // 设置模型支持拖拽时的移动和复制操作/** 要允许Qt::MoveAction模型需要实现removeRows()函数*/ } /*在拖放操作中的数据项从模型中导出时要被编码为合适的格式来对应一个或多个MIME类型 如下自定义了一个类型仅支持纯文本类型*/ QStringList StringListModel::mimeTypes() const {QStringList types;// application/vnd.text.list为自定义的类型后续需要保持一致types application/vnd.text.list;return types; } /*进行拖放操作之前需要将数据放入到一个QMimeData类型的对象中 如下使用自定义的格式将所有要拖拽的数据都放入一个QMimeData对象中*/ QMimeData *StringListModel::mimeData(const QModelIndexList indexes) const {QMimeData *mimeData new QMimeData;QByteArray encodedData;QDataStream stream(encodedData, QDataStream::WriteOnly);//根据传入的indexes获取到所有的文本数据foreach (const QModelIndex index, indexes) {if(index.isValid()){QString text data(index, Qt::DisplayRole).toString();stream text;}}// 将数据放入QMimeData中mimeData-setData(application/vnd.text.list, encodedData);return mimeData; }bool StringListModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex parent) {// 如果是 Qt::IgnorAction直接返回trueif(action Qt::IgnoreAction)return true;// 如果数据不是指定的格式返回falseif(!data-hasFormat(application/vnd.text.list))return false;// 该模型是列表模型只有一列判断列是否正确if(column0)return false;// 设置开始插入的行int beginRow0;if(row ! -1)beginRow row;else if(parent.isValid())beginRow parent.row();elsebeginRow rowCount(QModelIndex());// 从data中读取数据QByteArray encodedData data-data(application/vnd.text.list);QDataStream stream(encodedData, QDataStream::ReadOnly);QStringList newItem;int rows0;while (!stream.atEnd()) {QString text;stream text;newItem text;rows;}insertRows(beginRow, rows, QModelIndex());foreach (const QString text, newItem) {QModelIndex idx index(beginRow, 0, QModelIndex());setData(idx, text);beginRow;}return true; }任何给定的模型处理放入数据的方式都依赖于它们的类型和向用户展现的方式。 一般应该使用最适合模型底层数据存储的方式来容纳放入的数据。不同类型的模型会使用不同的方式来处理放入的数据。 列表和表格模型只提供了一个平面结构来存储数据项结果是可能会在当数据放入一个视图中的已经存在的项目时插入新的行或列或者会使用提供的数据来覆盖已经存在的项目的内容。 树模型一般会在底层数据存储中添加包含新的数据的子项。 最后还需要更新flags()函数用于提供合适的标志向视图表明哪些项目是可以被拖拽的、哪些项目是可以接受放入的。 在自定义模型中实现视图中的项的拖放代码参考https://github.com/Innern/Qt/tree/master/ModelView/Examples/01_AddressBooks该项目参考了官方示例Address Books Example但是增加了对视图中的项的拖放的支持。 如下 需要注意的是 mimeData()函数的参数indexes包含所有选择拖放的项的索引。比如 如果是简单的列表视图只有一列选择拖放时只选择了一行那么indexes中包含一个索引即这一行的索引。如果是表格视图有两列选择拖放时选择一行那么indexes中包含两个索引即这一行的每一列的索引。
http://www.w-s-a.com/news/809222/

相关文章:

  • 深圳珠宝网站设计北京高端网站建设优势
  • 合肥企业制作网站wordpress创建网站
  • 织梦网站开发兼职wordpress 中间截取缩略图
  • 南通制作网站旅游搭建网站
  • 专业做商铺的网站个人网页html模板完整代码
  • 什么网站做美食最好最专业关键词推广是什么意思
  • 自助建设网站软件网站导航网站可以做吗
  • 网站模板放哪长沙网站优化分析
  • 泉州网站建设价钱网站模板素材
  • 南通网站托管js建设网站外网
  • 成都企业网站公司wordpress内页模板
  • 58同城建网站怎么做wordpress评论显示数字ip
  • 免费制作论坛网站模板免费下载北京网站制作长沙
  • 旅游网网站建设网站如何自己做seo
  • 如何验证网站所有权做二手家具回收哪个网站好
  • 做哪种网站赚钱项目开发流程
  • 网站建设和网站网络推广网站建设软件定制
  • 站长工具网址查询全球云邮登陆网站
  • 宁波 住房和建设局网站网上发帖推广
  • 平面设计在线网站工业设计公司有哪些
  • 福州网站设计外包公司网站做的比较好
  • 如何设计网站首页网站开发综合技能实训心得体会
  • 用织梦做的网站好用吗w网站链接如何做脚注
  • 东莞做网站公司在哪哪里有网站培训的
  • 做宣传 为什么要做网站那重庆网站建设公司在线联系
  • 网站设计制作售价多少钱制作图片的软件是
  • 网站验证码目录简单带数据库的网站模版
  • 制作网站用c#做前台网站建设专题的意义
  • 广西建设职业技术学院教育网站牡丹区建设局网站
  • 网站后台怎么用ftp打开上海外贸进出口有限公司