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

保安做网站找柳市做网站

保安做网站,找柳市做网站,织梦cms怎么做网站地图,阿里云 wordpress插件在 Qt 中对数据处理主要有两种方式#xff1a;1#xff09;直接对包含数据的的数据项 item 进行操作#xff0c;这种方法简单、易操作#xff0c;现实方式单一的缺点#xff0c;特别是对于大数据或在不同位置重复出现的数据必须依次对其进行操作#xff0c;如果现实方式改…在 Qt 中对数据处理主要有两种方式1直接对包含数据的的数据项 item 进行操作这种方法简单、易操作现实方式单一的缺点特别是对于大数据或在不同位置重复出现的数据必须依次对其进行操作如果现实方式改变则在改动程序过程中还需对数据进行重新编码操作费工费资源。2采用 model/view 模型将数据 -- 模型 -- 视图三者串起来通过约定的接口保证数据的正确显示和显示方式的多样性当需要重新调整显示时只需修改视图保证接口不变即可以新 view 显示数据。 1/2 两种处理数据方式 视图与数据绑定在一起 视图与数据隔离 在此我主要介绍第二种模型model/view模式在此以QAbstractTableModel/QTableView 为例。 如果是只读模式model 只要重写以下三个方法 //a方法返回模型行数。 int rowCount(const QModelIndex parent) const; //b方法返回模型列数。 int columnCount(const QModelIndex parent) const; //c方法返回index项的role角色的数据。其中index项中可以有多个角色每个角色都可以有一个数据。 QVariant data(const QModelIndex index, int role) const; 如果用户要能够编辑数据编辑模式model 还需要重写以下两个方法 //d方法设置模型中项的内容。 bool QAbstractItemModel::setData(const QModelIndex index, const QVariant value, int role Qt::EditRole);//e方法:返回项的编辑形式默认情况下只有ItemIsSelectable和ItemIsEnabled如果要可编辑需要 //添加ItemIsEditable属性。 Qt::ItemFlags QAbstractTableModel::flags(const QModelIndex index) const 其中 a/b/c 方法为纯虚函数pure virtual method继承的类必须由 coder 自己实现此方法。d/e 方法为虚函数virtualcoder 在继承了此方法实现自定义内容后可直接调用基类方法。 在此我们以《c gui programming with Qt4》中的 trackEditor 例子作一讲解。 class MyTableModel : public QAbstractTableModel { public:explicit MyTableModel(QListTrack* tracks, QWidget *parent 0);virtual int rowCount(const QModelIndex parent) const;virtual int columnCount(const QModelIndex parent) const;virtual QVariant data(const QModelIndex index, int role) const;virtual QVariant headerData(int section,Qt::Orientation orientation,int role) const;virtual Qt::ItemFlags flags(const QModelIndex index) const;virtual bool setData(const QModelIndex index, const QVariant value, int role);private:QListTrack* pTracks; }; 其中 “QListTrack* tracks” 是用来保存 model 所显示的数据集合在 model 初始化时被赋值根据 data 方法的算法调用其中数据显示。 MyTableModel::MyTableModel(QListTrack* tracks, QWidget *parent) {Q_UNUSED(parent);pTracks tracks; } 构造函数对 tracks 进行赋值。 int MyTableModel::rowCount(const QModelIndex parent) const {Q_UNUSED(parent);return pTracks-count(); }int MyTableModel::columnCount(const QModelIndex parent) const {Q_UNUSED(parent);return 2; } 以上 2 个方法返回 model 的行 / 列数因为 tracks 中的数据量不确定所以直接返回其 count 方法保证每次都是最新值 QVariant MyTableModel::data(const QModelIndex index, int role) const {if ( !index.isValid()) {return QVariant();}if (Qt::DisplayRole role || Qt::EditRole role) {if (0 index.column()) {return pTracks-at(index.row()).getTitle();} else if (1 index.column()) {return pTracks-at(index.row()).getDuration();}}return QVariant(); } 根据数据类型和所在列返回不同的数据信息当 index 都不属于以上两种情况时返回 QVariant 对象。EditRole 保证了当用户编辑数据时数据显示的是被选中模式而不是直接消失。 bool MyTableModel::setData(const QModelIndex index, const QVariant value, int role) {if ( !index.isValid()) {return false;}if (Qt::EditRole role) {(*pTracks)[index.row()].setTitle(value.toString());emit dataChanged(index, index);return true;} else {return QAbstractTableModel::setData(index, value, role);} } 根据 coder 处理和传入角色设置 index 处项的值及 tracks 中对应处的数据并更新 index 的数据显示。当传入数据 coder 不处理时则直接调用基类方法处理再辞没有特别指明第几列进行编辑因为是后面通过 flags 方法来设定了可编辑的列故此处不用再特别指明。在此请注意setData 方法是判断的是 Qt::EditRole 角色data 方法是 Qt::DisplayRole但是保存、读取的都是 tracks这正是 coder 要注意的在不同的过程时程序所处于的角色不同但是都操作同样的数据库tracks这点要注意。 Qt::ItemFlags MyTableModel::flags(const QModelIndex index) const {if (0 index.column()) {return (QAbstractTableModel::flags(index) | Qt::ItemIsEditable);} else {return QAbstractTableModel::flags(index);} } model 中每个项的处理标志位默认为ItemIsEnabled | ItemIsSelectablecoder 可根据要求对不同属性的项进行设置。在此设定第 0 列可编辑其余列不可编辑。 程序运行结果分别用 TableView 和 ListView 显示相同的数据 具体代码如下共有 maindialgmytablemodeltack 三个类一个 main 运行类。具体界面文件是由 Qt 自己生成的 ui。 track.h #ifndef TRACK_H #define TRACK_H#include QStringclass Track { public:explicit Track(const QString title , int duration 0);QString getTitle() const;int getDuration() const;void setDuration(int duration);void setTitle(QString title);private:QString mTitle;int mDuration; };#endif // TRACK_H track.cpp #include track.hTrack::Track(const QString title, int duration) :mTitle(title),mDuration(duration) {}QString Track::getTitle() const {return mTitle; }int Track::getDuration() const {return mDuration; }void Track::setDuration(int duration) {mDuration duration; }void Track::setTitle(QString title) {mTitle title; } mytablemodel.h #ifndef MYTABLEMODEL_H #define MYTABLEMODEL_H#include QWidget #include QAbstractTableModel #include track.hclass MyTableModel : public QAbstractTableModel { public:explicit MyTableModel(QListTrack* tracks, QWidget *parent 0);virtual int rowCount(const QModelIndex parent) const;virtual int columnCount(const QModelIndex parent) const;virtual QVariant data(const QModelIndex index, int role) const;virtual QVariant headerData(int section,Qt::Orientation orientation,int role) const;virtual Qt::ItemFlags flags(const QModelIndex index) const;virtual bool setData(const QModelIndex index, const QVariant value, int role);private:QListTrack* pTracks; };#endif // MYTABLEMODEL_H mytablemodel.cpp #include mytablemodel.hMyTableModel::MyTableModel(QListTrack* tracks, QWidget *parent) {Q_UNUSED(parent);pTracks tracks; }int MyTableModel::rowCount(const QModelIndex parent) const {Q_UNUSED(parent);return pTracks-count(); }int MyTableModel::columnCount(const QModelIndex parent) const {Q_UNUSED(parent);return 2; }QVariant MyTableModel::data(const QModelIndex index, int role) const {if ( !index.isValid()) {return QVariant();}if (Qt::DisplayRole role) {if (0 index.column()) {return pTracks-at(index.row()).getTitle();} else if (1 index.column()) {return pTracks-at(index.row()).getDuration();}}return QVariant(); }QVariant MyTableModel::headerData(int section,Qt::Orientation orientation,int role) const {/*if (Qt::Vertical orientation) {return QVariant();}*/if (Qt::DisplayRole role Qt::Horizontal orientation) {switch (section) {case 0:return first;case 1:return second;}}return QVariant(); }Qt::ItemFlags MyTableModel::flags(const QModelIndex index) const {if (0 index.column()) {return (QAbstractTableModel::flags(index) | Qt::ItemIsEditable);} else {return QAbstractTableModel::flags(index);} }bool MyTableModel::setData(const QModelIndex index, const QVariant value, int role) {if ( !index.isValid()) {return false;}if (Qt::EditRole role) {(*pTracks)[index.row()].setTitle(value.toString());emit dataChanged(index, index);return true;} else {return QAbstractTableModel::setData(index, value, role);} } maindialog.h #ifndef MAINDIALOG_H #define MAINDIALOG_H#include QDialog #include QTableView #include QListView #include mytablemodel.hnamespace Ui { class MainDialog; }class MainDialog : public QDialog {Q_OBJECTpublic:explicit MainDialog(QWidget *parent 0);~MainDialog();void setTableModel(MyTableModel* model);void setListModel(MyTableModel* model);private:Ui::MainDialog *ui;QTableView* pTableView;QListView* pListView; };#endif // MAINDIALOG_H maindialog.cpp #includeQGridLayout #include maindialog.h #include ui_maindialog.hMainDialog::MainDialog(QWidget *parent) :QDialog(parent),ui(new Ui::MainDialog),pTableView(new QTableView(this)),pListView(new QListView(this)) {ui-setupUi(this);QVBoxLayout* layout(new QVBoxLayout(this));layout-addWidget(pTableView);layout-addWidget(pListView);setLayout(layout);setAttribute(Qt::WA_DeleteOnClose); }MainDialog::~MainDialog() {delete ui; }void MainDialog::setTableModel(MyTableModel *model) {pTableView-setModel(model); }void MainDialog::setListModel(MyTableModel* model) {pListView-setModel(model); } main.cpp #include QApplication #include maindialog.h #include track.h #include mytablemodel.hint main(int argc, char *argv[]) {QApplication a(argc, argv);QListTrack tracks;tracks Track(The Flying Dutchman: Overture, 630) Track(The Flying Dutchman: Wie aus der Fern laengst vergangner Zeiten, 374) Track(The Flying Dutchman: Steuermann, lass die Wacht,152) Track(Die Walkuere: Ride of the Valkyries, 286) Track(Tannhaeuser: Freudig begruessen wir die edle Halle, 384) Track(Tannhaeuser: Wie Todesahnung - O du mein holder Abendstern, 257) Track(Lohengrin: Treulich gefuert ziehet dahnin, 294) Track(Lohengrin: In fernem Land, 383) Track(Die Meistersinger von Nuernberg: Overture, 543) Track(Die Meistersinger von Nuernberg: Verachtet mir die Meister nicht, 200) Track(Die Meistersinger von Nuernberg: Ehrt eure deutschen Meister, 112) Track(Goetterdaemmerung: Funeral Music, 469) Track(Tristan und Isolde: Mild und leise, wie er laechelt, 375);MyTableModel model(tracks);MainDialog* w(new MainDialog(0));w-setTableModel(model);w-setListModel(model);w-show();return a.exec(); }
http://www.yutouwan.com/news/140163/

相关文章:

  • 潍坊网站推广排名广告互联网推广
  • 郑州网站建设制作价格维启网站建设
  • 后台查看网站容量企业网站 php 下载
  • 诚信网站平台建设方案广州定制网站建设方案书
  • 室内设计师常用网站wordpress 高校官网
  • 描述网站建设规范方法麻豆秋白色蕾丝半身裙
  • 做阿里巴巴怎么进公司网站建盏世家直播
  • 杭州做网站的优质公司做外贸球衣用什么网站
  • 绵阳哪里可以做网站的地方网站建设项目数
  • 哪些网站可以做ppt赚钱营销运营主要做什么
  • 福州网站关键排名如何看网站的语言
  • 做网站的标题图片广西柳州网站建设公司
  • 门户网站建设文案南京模板网站建设
  • 怎么做网站icp备案wordpress安装使用视频教程
  • 怎样上百度做广告苏州优化方式
  • 网站建设的基本要素有厦门建设集团网站
  • 网站风格优势wordpress内页php页面
  • 做网站有必要吗做个app
  • 全国各大网站南京推广公司
  • 商业网站建设的方法网站充值记账凭证怎么做
  • 企业网站建设栏目结构图北京5人死亡
  • 企业网站seo平台wordpress salient
  • 经营网站 备案查询莱芜网站快排
  • 网站的建设维护移动应用与开发是干什么的
  • 网站如何建设数据库青岛网站设计公司联系方式
  • 有用node.js做的网站吗广告设计网站哪个好
  • 陆良建设局网站北京旅游型网站建设
  • 网站流量消耗计算黑龙seo网站优化
  • 山东济宁省建设厅官方网站Dw制作个人网站
  • 网站建设华网天下公司下载软件的app