Qt ModelView教程——设置表头与可编辑Table

栏目: IT技术 · 发布时间: 4年前

内容简介:点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~这篇文章是在高铁上写的。这次继续和大家分享Qt Model/View的一些使用方法。

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~

这篇文章是在高铁上写的。

这次继续和大家分享Qt Model/View的一些使用方法。 Qt 帮助文档的整体目录如下:

Qt ModelView教程——设置表头与可编辑Table

一、 设置 Table 的行和列表头

只需在只读表的基础上加上

QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;

并重新实现即可。

QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const

{

if (role == Qt::DisplayRole)

{

if (orientation == Qt::Horizontal)

{

switch (section)

{

case 0:

return QString("first");

case 1:

return QString("second");

case 2:

return QString("third");

}

}


if (orientation == Qt::Vertical)

{

switch (section)

{

case 0:

return QString("first");

case 1:

return QString("second");

}

}

}


return QVariant();

}

效果如下:

Qt ModelView教程——设置表头与可编辑Table

二、 可编辑 Table 的实现

为了让之前只读表具备可编辑的功能,需要重新实现两个虚方法 setData()  and flags()

使用一个 QString 类型的二维数组来存储数据,并且当编辑完单元格内容时,向 window title 发送文本信息,使得 window title 随着单元格内容改变而改变。

#include <QAbstractTableModel>

#include <QString>


const int COLS= 3;

const int ROWS= 2;



class MyModel : public QAbstractTableModel

{

Q_OBJECT

public:

MyModel(QObject *parent);

int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE ;

int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;


bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole) Q_DECL_OVERRIDE;

Qt::ItemFlags flags(const QModelIndex & index) const Q_DECL_OVERRIDE ;


private:

QString m_gridData[ROWS][COLS]; //holds text entered into QTableView

signals:

void editCompleted(const QString &);

};

每次编辑单元格的时候 setData() 就会被调用。 index 参数会告诉我们具体哪个单元格被编辑、 value 参数可以让我们获得单元格内具体的内容

bool MyModel::setData(const QModelIndex & index, const QVariant & value, int role)

{

if (role == Qt::EditRole)

{

//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;

}

各种属性在 flags() 函数中调整。这两个属性 Qt::ItemIsSelectable | Qt::ItemIsEditable 足够我们这次使用了。

Qt::ItemFlags MyModel::flags(const QModelIndex &index) const

{

qDebug() << index.row() << index.column();


return Qt::ItemIsEditable | QAbstractTableModel::flags(index);


}

效果如下:

Qt ModelView教程——设置表头与可编辑Table

Qt ModelView教程——设置表头与可编辑Table

三、 MainWindow 中的设置

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent)

{

tableView = new QTableView(this);

setCentralWidget(tableView);

QAbstractTableModel *myModel = new MyModel(this);

tableView->setModel(myModel);


//transfer changes to the model to the window title

connect(myModel, SIGNAL(editCompleted(const QString &)), this, SLOT(setWindowTitle(const QString &)));

}


void MainWindow::showWindowTitle(const QString & title)

{

setWindowTitle(title);

}

最后,学不可以已!

Qt ModelView教程——设置表头与可编辑Table


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective JavaScript

Effective JavaScript

赫尔曼 (David Herman) / 黄博文、喻杨 / 机械工业出版社 / 2014-1-1 / CNY 49.00

Effective 系列丛书经典著作,亚马逊五星级畅销书,Ecma 的JavaScript 标准化委员会著名专家撰写,JavaScript 语言之父、Mozilla CTO —— Brendan Eich 作序鼎力推荐!作者凭借多年标准化委员会工作和实践经验,深刻辨析JavaScript 的内部运作机制、特性、陷阱和编程最佳实践,将它们高度浓缩为极具实践指导意义的 68 条精华建议。 本书共......一起来看看 《Effective JavaScript》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具