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

漳州微网站建设公司推荐工程师招聘网站

漳州微网站建设公司推荐,工程师招聘网站,王璞网站开发实战答案,专用车网站建设每个UI开发人员都应该了解ModelView编程#xff0c;本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写#xff0c;所有平台无差别运行#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今#xff…每个UI开发人员都应该了解ModelView编程本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写所有平台无差别运行更提供了几乎所有开发过程中需要用到的工具。如今Qt已被运用于超过70个行业、数千家企业支持数百万设备及应用。在上文中我们主要为大家介绍了Model/View模型/视图的一些基本概念点击这里回顾本文将继续为大家介绍如何创建一个简单的模型/视图应用。点击获取Qt Widget组件下载(Q技术交流1668302882. 一个简单的模型/视图应用如果想开发一个模型/视图应用程序应该从哪里开始呢我们建议从一个简单的示例开始逐步扩展它这使得理解体系结构更加容易。对于许多开发人员来说在调用IDE之前试图详细理解模型/视图体系结构是不太方便的从具有演示数据的简单模型/视图应用程序开始实际上更容易。下面是7个非常简单且独立的应用程序它们展示了模型/视图编程的不同方面源代码可以在examples/widgets/tutorials/modelview目录中找到。2.3 表单元格内的时钟我们仍然有一个只读表但这一次内容每秒都在变化因为正在显示当前时间。(文件来源examples/widgets/tutorials/modelview/3_changingmodel/mymodel.cpp)QVariant MyModel::data(const QModelIndex index, int role) const { int row index.row(); int col index.column();if (role Qt::DisplayRole row 0 col 0) return QTime::currentTime().toString();return QVariant(); }时钟的滴答声缺少了一些东西需要每一秒都告诉视图时间已经改变、需要再次读取。我们用定时器来做这个在构造函数中我们将其间隔设置为1秒并连接其超时信号。(文件来源examples/widgets/tutorials/modelview/3_changingmodel/mymodel.cpp)MyModel::MyModel(QObject *parent) : QAbstractTableModel(parent) , timer(new QTimer(this)) { timer-setInterval(1000); connect(timer, QTimer::timeout , this, MyModel::timerHit); timer-start(); }这里是对应的槽位(文件来源examples/widgets/tutorials/modelview/3_changingmodel/mymodel.cpp)void MyModel::timerHit() { // we identify the top left cell QModelIndex topLeft createIndex(0,0); // emit a signal to make the view reread identified data emit dataChanged(topLeft, topLeft, {Qt::DisplayRole}); } 通过发出dataChanged() 信号我们要求视图再次读取左上角单元格中的数据。注意没有显式地将dataChanged()信号连接到视图这在调用setModel()时自动发生。2.4 设置列和行标题标题可以通过一个视图方法隐藏ableView-verticalHeader()-hide()然而头部内容是通过模型设置的所以我们重新实现headerData()方法(文件来源examples/widgets/tutorials/modelview/4_headers/mymodel.cpp)QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role Qt::DisplayRole orientation Qt::Horizontal) { switch (section) { case 0: return QString(first); case 1: return QString(second); case 2: return QString(third); } } return QVariant(); }注意方法headerData()也有一个参数role其含义与MyModel::data()中的相同。2.5 最小编辑示例在本例中我们将构建一个应用程序通过重复输入到表格单元格中的值自动用内容填充窗口标题。为了能够方便地访问窗口标题我们将QTableView放在QMainWindow中。模型决定编辑功能是否可用为了启用可用的编辑功能我们只需要修改模型这是通过重新实现以下虚拟方法来实现的:setData() 和flags()。(文件来源examples/widgets/tutorials/modelview/5_edit/mymodel.h)// mymodel.h #include QAbstractTableModel #include QStringconst int COLS 3; const int ROWS 2;class MyModel : public QAbstractTableModel { Q_OBJECT public: MyModel(QObject *parent nullptr); int rowCount(const QModelIndex parent QModelIndex()) const override; int columnCount(const QModelIndex parent QModelIndex()) const override; QVariant data(const QModelIndex index, int role Qt::DisplayRole) const override; bool setData(const QModelIndex index, const QVariant value, int role Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex index) const override; private: QString m_gridData[ROWS][COLS]; //holds text entered into QTableView signals: void editCompleted(const QString ); };我们使用二维数组QString m_gridData来存储数据这使得m_gridData成为MyModel的核心。MyModel的其余部分就像一个包装器并将m_gridData适配到QAbstractItemModel接口同时我们引入了editCompleted()信号这使得将修改后的文本传输到窗口标题成为可能。(文件来源examples/widgets/tutorials/modelview/5_edit/mymodel.cpp)bool MyModel::setData(const QModelIndex index, const QVariant value, int role) { if (role Qt::EditRole) { if (!checkIndex(index)) return false; //save value from editor to member m_gridData m_gridData[index.row()][index.column()] value.toString(); //for presentation purposes only: build and emit a joined string QString result; for (int row 0; row ROWS; row) { for (int col 0; col COLS; col) result m_gridData[row][col] ; } emit editCompleted(result); return true; } return false; }每次用户编辑单元格时都会调用setData()index参数告诉我们编辑了哪个字段value提供了编辑过程的结果。角色总是被设置为Qt::EditRole 因为我们的单元格只包含文本如果存在一个复选框并且用户权限设置为允许选择该复选框则调用也会将角色设置为Qt::CheckStateRole。(文件来源examples/widgets/tutorials/modelview/5_edit/mymodel.cpp)Qt::ItemFlags MyModel::flags(const QModelIndex index) const { return Qt::ItemIsEditable | QAbstractTableModel::flags(index); }可以使用flags()调整单元格的各种属性。返回Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled足以向编辑器显示一个单元格可以被选择。如果编辑一个单元格修改的数据多于该特定单元格中的数据则模型必须发出dataChanged()信号以便读取已更改的数据。
http://www.eeditor.cn/news/124576/

相关文章:

  • 外外贸网站推广方案免费模板素材软件
  • 专业的句容网站建设广告营销案例100例
  • 上饶建设银行网站正规代加工在哪里找
  • 深圳网站建设就q479185700顶上沧州大型企业网站建设
  • 哪些安防公司做了手机网站apicloud安装wordpress
  • 网上做翻译兼职网站好房产网签
  • dw做网站菜单栏网站建设 华博互联
  • 做标准件网站哈尔滨建设信息网
  • 响应式网站用什么开发的郑州seo管理
  • 网页设计比较优秀的网站北京网站开发外包
  • 对接 网站后台龙岩seo外包公司
  • 用vs做的网站怎么打开吗蚌埠企业网站建设
  • 基于php技术的小型企业网站开发凡科建站快车官网
  • 电子商务网站开发基础电商培训视频教程
  • 佛山网站建设怎么办门户网站 用什么语言
  • 如何将视频添加到网站上建设校园网站必要性
  • 免费开发个人网站百度推广关键词价格查询
  • 怎么用ftp修改网站图片图片转换成网址链接
  • 策划案网站wordpress固定链接怎么设置
  • 网站ui设计WordPress写作app
  • 深圳微信建网站wordpress无法缩进
  • 买网站平台名字吗厦门网站建设的公司哪家好
  • wordpress建站教程第六节网站开发尾款如何做账
  • 义乌做网站多少钱南山网站建设深圳信科
  • 长沙网站开发 58新乡网络公司推荐
  • 做新网站都需要准备什么动漫制作专业正规吗
  • 网站备案对网站负责人的要求室内设计师收入高吗
  • 网站开发主菜单和子菜单互动平台怎么改名字
  • 网站页面链接结构hhvm wordpress 空白
  • 建一个网站花费西安网站建设招标