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

phpcms v9网站导航网页导航菜单设计

phpcms v9网站导航,网页导航菜单设计,吉林网站建设,搜索引擎优化的方法与技巧目录 预备知识 模型 关联 刷新 示例 代理 模型 界面 结果 完整资料见#xff1a; 所谓MV结构#xff0c;是“model-view”#xff08;模型-视图#xff09;的简称。也就是说#xff0c;表格的数据保存在model中#xff0c;而视图由view实现。在我前面的很多博客…目录 预备知识 模型 关联 刷新 示例 代理 模型 界面 结果 完整资料见 所谓MV结构是“model-view”模型-视图的简称。也就是说表格的数据保存在model中而视图由view实现。在我前面的很多博客如设置QTableView的内容自动换行(2)_qstandarditem 文本换行显示-CSDN博客 如何截获QTableView的鼠标事件_qtableview里面捕获鼠标移动事件-CSDN博客  QAbstractItemModel数据更新-CSDN博客  Qt如何正确的显示、修改表格(QTableView)的内容_qt tableview修改表格内容-CSDN博客  我已经花了很多笔墨描述Qt表格的软件设计方法。在本篇文章中我将介绍如何编辑表格--表格代理。 预备知识 模型 模型用来存储表格数据。这个类通常派生自QAbstractTableModel。这个派生类的通常由如下几个部分组成 成员变量 m_data                                    m_data通常是一个listvector或者map等常见的数据结构。                                                 用来存储数据。                    以下为虚函数 columnCount                          列数 rowCount                                行数 data                                        表格显示的内容 flags                                        flags决定了各个单元格可否被编辑。假如不需要编辑表格                                                 也可以不重写此虚函数 headerData                             headerData返回值决定了各行/列标题名称 setData                                   setData决定了编辑单元格以后编辑结果如何影响m_data。                                                 假如不需要编辑表格也可以不重写此虚函数 关联 通过QTableView::setModel()建立与模型的关联 刷新 当m_data发生变化时或者界面需要刷新时刷新动作由dataChanged信号触发。很多人奇怪怎么没看到对应dataChanged的槽函数Qt内部已经将dataChanged与对应的槽函数做了关联开发者不必操心只要发出信号即可。 示例 代理 专门建立一个代理类 #include EdtDelegate.hEdtDelegate::EdtDelegate(int iMin, int iMax, QObject *parent): QStyledItemDelegate(parent) {m_pIntVld new QIntValidator(iMin, iMax, this); }EdtDelegate::~EdtDelegate() {}QWidget *EdtDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem /* option */,const QModelIndex /* index */) const {QLineEdit *editor new QLineEdit(parent);editor-setValidator(m_pIntVld);return editor; }void EdtDelegate::setEditorData(QWidget *editor,const QModelIndex index) const {QString qstrTxt index.model()-data(index, Qt::DisplayRole).toString();QLineEdit *Edt static_castQLineEdit*(editor);Edt-setText(qstrTxt); }void EdtDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex index) const {QLineEdit *edt static_castQLineEdit*(editor);auto qstrTxt edt-text();model-setData(index, qstrTxt, Qt::EditRole); }void EdtDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem option, const QModelIndex /* index */) const {editor-setGeometry(option.rect); } #include ComboDelegate.h#include QComboBoxComboDelegate::ComboDelegate(QStringList qstrlst, QObject *parent): QStyledItemDelegate(parent), m_qstrlst(qstrlst){}QWidget *ComboDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem /* option */,const QModelIndex /* index */) const{QComboBox *editor new QComboBox(parent);editor-addItems(m_qstrlst);return editor;}void ComboDelegate::setEditorData(QWidget *editor,const QModelIndex index) const{QString qstrTxt index.model()-data(index, Qt::DisplayRole).toString();QComboBox *cmbBox static_castQComboBox*(editor);cmbBox-setCurrentText(qstrTxt);}void ComboDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex index) const{QComboBox *cmbBox static_castQComboBox*(editor);auto qstrTxt cmbBox-currentText();model-setData(index, qstrTxt, Qt::EditRole);}void ComboDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem option, const QModelIndex /* index */) const{editor-setGeometry(option.rect);} 这里有人会问createEditor里面有new的动作为什么没看到释放createEditor返回一个指针。Qt内部有一套机制在编辑结束后自动释放该指针。 模型 #include Model.h//Model Model::Model(int iTotalCol, QStringList qstrlstHeader, QListint lstNonEditableCols,QObject *parent) : QAbstractTableModel(parent),m_lstNonEditableCols(lstNonEditableCols),m_iTotalCol(iTotalCol), m_qstrlstHeader(qstrlstHeader) {}int Model::rowCount(const QModelIndex ) const {return m_data.size(); }int Model::columnCount(const QModelIndex ) const {return m_iTotalCol; }QVariant Model::data(const QModelIndex index, int role) const {int i index.row(), j index.column();if ((i 0) (i m_data.size())){if(m_data.at(i).size() j){if(role Qt::DisplayRole){//m_data的类型是QListQStringList每一个QStringList对应表格里一行数据//m_data.at(i).at(j)对应的就是第i行第j列的数据return m_data.at(i).at(j);}else if(role Qt::TextAlignmentRole)return Qt::AlignCenter;else{}}else{return QString();}}else{}return QVariant(); }QVariant Model::headerData(int section, Qt::Orientation orientation, int role) const {if(role Qt::DisplayRole){if(orientation Qt::Horizontal)//横向排列的标题栏也就是各个列的标题{if(m_qstrlstHeader.size() section)return m_qstrlstHeader.at(section);else{return QString();}}else{//纵向排列的标题栏也就是各个行的标题return QString();}}else if(role Qt::TextAlignmentRole){//文字对齐方式设置为居中对齐return Qt::AlignCenter;}else{}return QAbstractTableModel::headerData(section, orientation, role); }void Model::vSetData(QListQStringList lstData) {m_data.clear();m_data.append(lstData);//发出dataChanged信号界面上才更新表格内容emit dataChanged(createIndex(0,0), createIndex(0, columnCount()-1)); }Qt::ItemFlags Model::flags(const QModelIndex index) const {if(m_lstNonEditableCols.contains(index.column()))//假如index对应的列是不可编辑的列return QAbstractTableModel::flags(index);else//假如index对应的列是可编辑的列就给它添加ItemIsEditable属性return Qt::ItemIsEditable | QAbstractTableModel::flags(index); }bool Model::setData(const QModelIndex index, const QVariant value, int role) {if(role Qt::EditRole){//编辑单元格之后用编辑结果更新对应的m_dataint row index.row(), col index.column();QStringList qstrlst m_data.at(row);qstrlst.replace(col, value.toString());m_data.replace(row, qstrlst);}return true; }界面 #include mainwindow.h #include ui_mainwindow.hMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui-setupUi(this);m_pModel new Model(4, {1, 2, 3, 4}, {0,1});ui-tableView-setModel(m_pModel);//setEditTriggers(QTableView::DoubleClicked);注明触发编辑单元格的方式是鼠标双击ui-tableView-setEditTriggers(QTableView::DoubleClicked);QListQStringList lstqstrlst;lstqstrlstQStringList{a, b, c, d};//向表格中注入数据m_pModel-vSetData(lstqstrlst);m_scpCmbDelg.reset(new ComboDelegate({a,b,c}, this));//表格第2列采用combobox代理其实是第3列因为从0开始ui-tableView-setItemDelegateForColumn(2, m_scpCmbDelg.data());m_scpEdtDelg.reset(new EdtDelegate(0,10, this));//表格第3列采用lineedit代理ui-tableView-setItemDelegateForColumn(3, m_scpEdtDelg.data()); }MainWindow::~MainWindow() {delete ui; }结果 双击第一列、第二列无法编辑单元格。但是双击第三列可以编辑combobox双击第四列可以编辑lineedit: qt代理访问csdn金色熊族获取完整信息 完整资料见 【免费】介绍如何给Qt表格添加代理资源-CSDN文库
http://www.hkea.cn/news/14506016/

相关文章:

  • 南通网站建设公司哪个好韩国美食做视频网站
  • 网站建设设备预算网站域名空间合同
  • 大型网站设计公司xampp下安装wordpress
  • 定制程序网站金昌市建设局网站
  • 招聘代做网站游戏网页制作代码
  • 网页制作与网站开发网站建设合同 附件
  • 高性能网站建设进阶...如何做带后台的网站
  • 知乎免费阅读网站网站如何做外部链接
  • 装饰行业网站模板免费下载网站软件
  • 10有免费建网站ui设计到底是干嘛的
  • 泰安公司做网站网站做外链好嘛
  • 免费做快闪网站深圳外贸公司倒闭
  • 未备案网站查询济南网站建设 联系小七
  • 网站源码修改后怎么提交门户网站建设先进性
  • 英讯网站建设新平台推广
  • 烟台网站制作开发网络营销专业主修课程
  • 医院网站建设预算表网站建设哪家公司比较好
  • 网站设计咨询网站wordpress修改右键菜单
  • 想制作自己的网站wordpress使用培训
  • 查网站是否正规python基础教程电子版书籍
  • 川畅科技联系 网站设计产品创新设计案例
  • 网站群建设系统网站建设网站建设 网站制作
  • 做网站前台需要什么软件信息免费建站网站有哪些
  • 潮州移动网站建设wordpress jekyll 选择
  • 在线室内设计网站做电影网站需要的服务器配置
  • 徐州网站建设培训wordpress文章长
  • 医院网站建设具体内容湖南网站推广建设公司
  • 网站域名注册证明北京门户网站开发
  • 织梦cms网站更新滨海做网站价格
  • 什么搜索引擎搜索最全seo服务外包公司