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


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

查看所有标签

猜你喜欢:

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

U一点·料

U一点·料

阿里巴巴集团 1688用户体验设计部 / 机械工业出版社 / 2015-7-13 / 79.00元

《U一点·料——阿里巴巴1688UED体验设计践行之路》是1688UED团队历经多年实践之后的心血之作,书中以“道─术─器”的思路为编排脉络,从设计观、思考体系、方法论上层层剖析,将零散的行业knowhow串成体系,对“UED如何发展突破”提出了自己的真知灼见。该书重实战、讲方法、求专业、论文化,是一部走心的诚意之作。 本书作者从美工到用户体验设计师,从感性随意到理性思考,从简单的PS做图到......一起来看看 《U一点·料》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具