1.QSqlTableModel
QSqlTableModel作为QTableView的数据源。
(1) 模型数据在视图中居中显示的设置方法,重写data虚函数。
QVariant MySqlTableModel::data(const QModelIndex &index, int role) const
{
QVariant value = QSqlQueryModel::data(index, role);
if (Qt::TextAlignmentRole == role) value = Qt::AlignCenter;
return value;
}
(2) 数据表中列名与视图中水平标题的对应设置
this->setHeaderData(this->fieldIndex("name"), Qt::Horizontal, "名称");
this->setHeaderData(this->fieldIndex("head_node"), Qt::Horizontal, "首端节点");
this->setHeaderData(this->fieldIndex("end_node"), Qt::Horizontal, "末端节点");
(3) 多次刷新视图中数据时,模型的操作
1> 调用QSqlTableModel的clear()函数,清空数据。
2> 设置表名,指定查询数据源。
3> 是否进行条件查询,如果需要,调用QSqlTableModel的setFilter设置筛选条件。注意:字符串和数字的大小比较机制的区别,字符串是从左向右单个字符依次比较,数字是真正的大小比较。
4> 重新设置数据表列名与视图水平标题的对应关系。
5> 重新为视图设置数据模型。
m_sql_table_model->clear();
m_sql_table_model->setTable("acline");
m_sql_table_model->setFilter(QString("(load_factor > %1) AND (circuit_vol > %2)").arg(factor).arg(grade));
m_sql_table_model->select();
m_sql_table_model->set_header_data(table);
m_sql_table_view->setModel(m_sql_table_model);
2. QStringListModel
(1) QStringListModel作为QCompleter的数据源,数据源需要支持不定时更新。
1> new一个QStringListModel的类型指针,该指针为成员变量。
m_completer_model = new QStringListModel(this);
2> 创建一个QCompleter的类型指针,与QStringListModel产生对应关系。QCompleter能实现自动填充功能,方便用户输入,提升用户的体验,一般和QLineEdit、QComboBox搭配使用。
QCompleter *completer = new QCompleter(m_completer_model);
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setFilterMode(Qt::MatchContains);
3> 更新QStringListModel中数据
m_completer_model->removeRows(0, m_completer_model->rowCount());
m_completer_model->setStringList(gen_list);
(2) QStringListModel作为QListView的数据源。
m_test_model= new QStringListModel;
m_list_view_line = new QListView;
m_list_view_line->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_list_view_line->setModel(m_test_model);
3.QStandardItemModel
QStandardItemModel除了可以作为QTableView的模型,还可以作为真正的数据源,与二维数组类似,但是,QStandardItemModel的增删改查都很方便,而且,模型的项类型QStandardItem拥有多种角色,极大的扩充了数据的使用方式。