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

众鱼深圳网站建设长沙有哪些软件公司

众鱼深圳网站建设,长沙有哪些软件公司,如何做一个商城类型的网站,网站 托管qt提供了几个视图来进行信息的列表显示#xff0c;QListView可以用来显示继承QStractListModel的字符串列表中的字符串#xff0c;默认的模型里面只包含一列的内容#xff1a; 这里以qml为例子#xff0c;先新建一个qml的项目#xff0c;示例代码如下#xff1a; 先创建一…qt提供了几个视图来进行信息的列表显示QListView可以用来显示继承QStractListModel的字符串列表中的字符串默认的模型里面只包含一列的内容 这里以qml为例子先新建一个qml的项目示例代码如下 先创建一个列表的只读模型以QAbstractListModel为基类最基础的只用实现两个函数即可rowCount()和 data()一个用来返回模型的行数一个用来返回指定的模型索引的数据项 //返回模型的行数int rowCount(const QModelIndex parent QModelIndex()) const;//返回指定模型索引的数据项QVariant data(const QModelIndex index, int role) const;使用一个QStringList列表来作为内部的数据源 QStringList m_strValue;现在来开始实现这两个函数这两个函数的实现是比较简单的 int MyListModel::rowCount(const QModelIndex parent) const {Q_UNUSED(parent);return m_strValue.count(); }QVariant MyListModel::data(const QModelIndex index, int role) const {if(!index.isValid())return QVariant();if(role Qt::DisplayRole)return m_strValue.at(index.row());return QVariant(); }再建立一个设置改列表值的函数因为后面要将测试的model注册到qml中去所以不方便再构造函数中将QStringList的值设置下去所以这里添加一个setDataModel()函数函数的定义如下 void MyListModel::setDataModel(const QStringList var) {if(var.isEmpty())return ;m_strValue var; }到这里对MyListModel的类的完善已经差不多了接下来新增一个测试的类来添加数据到列表中去 这里直接给出两个文件如下 testlistmodel.h #ifndef TESTLISTMODEL_H #define TESTLISTMODEL_H#include QObject #include mylistmodel.hclass TestListModel : public QObject {Q_OBJECT public:explicit TestListModel(QObject *parent nullptr);MyListModel m_model;signals:};#endif // TESTLISTMODEL_H testlistmodel.cpp #include testlistmodel.hTestListModel::TestListModel(QObject *parent) : QObject(parent) {QStringList list;for(int i 0; i 30; i){list QString(第%1个).arg(i);}m_model.setDataModel(list); } 最后再main.cpp中将model注册到qml中 #include QGuiApplication #include QQmlApplicationEngine #include QQmlContext #include testlistmodel.hint main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication app(argc, argv);QQmlApplicationEngine engine;TestListModel model;engine.rootContext()-setContextProperty(testModel, model.m_model);const QUrl url(QStringLiteral(qrc:/main.qml));QObject::connect(engine, QQmlApplicationEngine::objectCreated,app, [url](QObject *obj, const QUrl objUrl) {if (!obj url objUrl)QCoreApplication::exit(-1);}, Qt::QueuedConnection);engine.load(url);return app.exec(); } 接下来在qml中使用ListView组件并指定使用的model就可以了。 main.qml如下 import QtQuick 2.12 import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480title: qsTr(Hello World)ListView {anchors.fill: parent;model:testModel;delegate: Text {id: ttheight:30;text: display;//Qt::DisplayRole提供一个角色名display}} } 运行结果如下 这就是一个列表显示根据在c中提供的数据注册到qml中来显示的动图这里就不展示了。 可以看到这里显示的是一列的内容如果要使用ListView来显示多列的内容应该如何去设计model呢这里就需要去修改数据类型也就是不能继续用QStringList作为存储数据的了需要重新设计一个数据类型可以去报存多个数据这里选取的数据类型如下 QMapint, QMapint,QVariant tmp; //使用QMap来存存放数据内嵌一个QMap来存放每一行的各个列的数据 //内嵌的QMap也可单独设计一个类来实现只不过在后续的其他方面也需要做不同的修改这里先不说定义一个这样的容器来做数据的存放还要在原有的基础上添加几个函数也要重写roleNames()函数如下 再新增一个变量用来存放角色role: QHashint, QByteArray m_roleName();后面直接放上修改后的文件改的内容比较多直接在代码中标注出来 mylistmodel.h #ifndef MYLISTMODEL_H #define MYLISTMODEL_H#include QObject #include QAbstractListModelclass MyListModel : public QAbstractListModel {Q_OBJECT public:MyListModel(QObject *parent 0);//返回模型的行数int rowCount(const QModelIndex parent QModelIndex()) const;//返回指定模型索引的数据项QVariant data(const QModelIndex index, int role) const;//设置模型数据void setDataModel(const QMapint, QMapint, QVariant var);//返回列int columnCount(const QModelIndex parent QModelIndex()) const;QHashint, QByteArray roleNames() const;void insertRoleName(const int role, const QByteArray name);private:QStringList m_strValue;QMapint, QMapint, QVariant m_map;QHashint, QByteArray m_roleName;};#endif // MYLISTMODEL_H mylistmodel.cpp #include mylistmodel.hMyListModel::MyListModel(QObject* parent) : QAbstractListModel(parent) {}int MyListModel::rowCount(const QModelIndex parent) const {Q_UNUSED(parent);return m_map.count();//改为m_map }QVariant MyListModel::data(const QModelIndex index, int role) const {if(!index.isValid())return QVariant();if(index.row() m_map.size())return QVariant();if(role Qt::UserRole) //使用QT提供的自定义的角色的值累加{QMapint, QVariant var m_map.value(index.row());return var.value(role);}return QVariant(); }void MyListModel::setDataModel(const QMapint, QMapint, QVariant var) {if(var.isEmpty())return ;m_map var; }int MyListModel::columnCount(const QModelIndex parent) const {Q_UNUSED(parent);return m_roleName.count(); }QHashint, QByteArray MyListModel::roleNames() const {return m_roleName; }void MyListModel::insertRoleName(const int role, const QByteArray name) {m_roleName.insert(role, name); } testlistmodel.cpp #include testlistmodel.hTestListModel::TestListModel(QObject *parent) : QObject(parent) {QMapint, QMapint, QVariant var;for(int i 0; i 30; i){QMapint,QVariant map;map.insert(Qt::UserRole,QString(第%1个).arg(i));map.insert(Qt::UserRole1,QString(产品%1个).arg(i));var.insert(i,map);}m_model.setDataModel(var);//添加角色m_model.insertRoleName(Qt::UserRole,Column_One);m_model.insertRoleName(Qt::UserRole1,Column_Two);} main.qml import QtQuick 2.12 import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480title: qsTr(Hello World)ListView {anchors.fill: parent;model:testModel;delegate: Item {id: it;height:30;width:parent.width;Row {anchors.fill: parent;Text{width:parent.width/2;text: Column_One;}Text {width:parent.width/2;text: Column_Two;}}}}} 以上就是所作的修改效果图如下 以上可能还有许多需要完善和修改的地方后续会跟进修改和优化。需要源码的可以留言邮箱。
http://www.hkea.cn/news/14488547/

相关文章:

  • 多用户建站平台国外创意网站
  • 西宁做网站_君博相约姑苏区最新通告
  • 怎么联网访问自己做的网站百度百科创建
  • 大良网站制作公司深圳平面广告设计公司
  • dede 网站改宽屏代码黄骅港属于哪个市
  • 南京网站开发南京乐识正规阿升网站免费学设计
  • 动画形式的h5在哪个网站做自适应网页设计规范
  • saas建站工具高校网站建设需求单
  • 江西天亿建设有限公司网站做网站公司介绍ppt
  • 山东建设厅造价员网站抖音代运营合同注意事项
  • 重庆王网站制作北京seo网站开发
  • 企业信息网站奉贤做网站价格
  • 宜阳建站如何进行在线营销
  • 网站数据统计广州网站建设案例
  • 诚聘高新网站开发工程师四川省网站备案
  • 网站建设费用有哪些wordpress安装好后怎么使用
  • 贵阳做网站 优帮云郑州做网站公司有多少钱
  • 成都网站建设的公司哪家好72建站网
  • 可以做c语言任务的网站廖珍琴建盏简介
  • 万州医院网站建设微网站 html5
  • 八冶建设集团有限公司网站网站建设企业电话
  • 2003iis网站建设错误2016响应式网站模版
  • wordpress编辑父主题太原优化排名推广
  • 互联网站备案信息中国设计品牌网
  • 维度 网站建设老年夫妻做爰视频网站
  • 企业宣传网站建设长沙外贸公司
  • html5视频播放器插件长沙企业关键词优化
  • 嘉兴市做外贸网站的公司网站建设 兼职
  • 浏览器正能量不良网站网站站做地图软件
  • 江苏省建设工程上岗证查询网站服务专业的公司网站设计