QT4.8对表格操作
工程项目中很多地方使用表格进行操作,相对QTableWidget 来讲 QTableView更加的灵活,更加的明白QT的MVC框架
前言
这里使用QStandardItemModel提供数据,QSortFilterProxyModel过滤数据,QTableView显示数据,可以理解QSortFilterProxyModel为渲染层
一、设置表头
二、添加数据
三、查找数据
四、删除数据
五、全部源码
UI文件只有一个
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QStringList>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void initHearder();
void addData();
void rmData(int count);
private slots:
void findData();
private:
Ui::Widget *ui;
QStringList m_headerList;
QStandardItemModel m_tableModel;
QSortFilterProxyModel m_modelProxy;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
initHearder();
addData();
connect(ui->lineEdit, SIGNAL(textChanged(QString)),
this, SLOT(findData()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::initHearder()
{
m_headerList << "name" << "class" << "gender" << " ";
m_modelProxy.setSourceModel(&m_tableModel);
ui->tableView->setModel(&m_modelProxy);
m_tableModel.setHorizontalHeaderLabels(m_headerList);
}
void Widget::addData()
{
m_tableModel.setItem(0, 0, new QStandardItem("jin"));
m_tableModel.setItem(0, 1, new QStandardItem("1.2"));
m_tableModel.setItem(0, 2, new QStandardItem("1"));
m_tableModel.setItem(1, 0, new QStandardItem("hu"));
m_tableModel.setItem(1, 1, new QStandardItem("1.1"));
m_tableModel.setItem(0, 2, new QStandardItem("0"));
m_tableModel.setItem(2, 0, new QStandardItem("wang"));
m_tableModel.setItem(2, 1, new QStandardItem("1.1"));
m_tableModel.setItem(2, 2, new QStandardItem("0"));
m_tableModel.setItem(3, 0, new QStandardItem("li"));
m_tableModel.setItem(3, 1, new QStandardItem("1.1"));
m_tableModel.setItem(3, 2, new QStandardItem("1"));
/* //这种方法插入也可以
m_tableModel.insertRow(0);
m_tableModel.setData(m_tableModel.index(0,0) , QString("1"));
m_tableModel.setData(m_tableModel.index(0,1) , QString("2"));
*/
}
void Widget::rmData(int count)
{
m_tableModel.removeColumn(count);
}
void Widget::findData()
{
//默认是从第零列查找,我们现在查找男女设置第三列
m_modelProxy.setFilterKeyColumn(2);
m_modelProxy.setFilterFixedString(ui->lineEdit->text());
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
六、结果
显示所有数据
查找是0的孩子
参考链接
这个比较细致,但是没有排序和查找功能
https://blog.csdn.net/u010031316/article/details/116886567