c++ - QTableWidget 或 sql 中的矩阵
问题描述
我需要创建一个图形邻接矩阵,我首先想创建一个 qtablewidget,但它在关闭后不保存值。这可以做到吗?或者最好创建一个sql数据库,但我无法想出一个像乘法表一样产生矩阵的输出。我的想法是创建记录,以便有 3 列:node1、node2 和 edge。像这样的东西:
"CREATE TABLE userlist ( "
"node1 VARCHAR(20),"
"node2 VARCHAR(20), "
"edge VARCHAR(20));"
标准输出的形成是不合适的。
model = new QSqlTableModel(this, db);
model ->setTable("graphlist");
model ->select();
ui_Main->tableView->setModel(model);
解决方案
我完全不明白你的意图。但我假设您已经使用带有列的表在数据库中存储了一个图表node1, node2, edge
。现在你想要一个显示邻接矩阵的表格。
我建议QAbstractTableModel
通过提供二维数组中的数据来为您的输出表使用 a 。然后使用 . 将 2D 数组与数据库同步QSqlTableModel
。
类似的东西:
将抽象类继承QAbstractTableModel
给一个类MyModel
,并向其添加静态二维数组或向量。使用以下内容覆盖该data
函数
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole){
return QVariant(MyModel::array[index.row()][index.column()]);
}
此外,您还必须填充 2D 数组
model = new QSqlTableModel(this, db);
model ->setTable("graphlist");
model ->select();
for (int i=0;I<model->rowCount();++i){
MyModel::array[model.record(i).value("node1").toInt()][model.record(i).value("node2").toInt()]=model.record(i).value("edge").toInt();
很抱歉,我的代码可能会引起一些混淆,.
但->
我相信您可以在代码中相应地处理它们。
另外我不知道你为什么varchar
在你的桌子上使用。最好使用int。但如果有必要,那么您可以使用另一个字符串数组来存储这些varchar
项目并映射它们。
推荐阅读
- javascript - elem.style.background 在我的笑话测试中没有被选中
- charles-proxy - 查询为空时如何使用Charles将请求映射到本地文件?
- python - 如何为与 PyInstaller 捆绑的 Windows、MacOS 和 Linux 应用程序创建快捷方式图标
- android - 无法导航到片段 - kotlin
- typescript - 如何为此去抖动功能编写测试?
- python - 查找一个文件上的行是否在 Python 中作为另一个文件的行中的单词出现
- python - 如何通过python脚本在Debian OS的控制台中填写docker登录信息
- flutter - 错误:flutter/lib/ui/ui_dart_state.cc(199) 未处理的异常:无法启动 Flutter 中的调用
- sql - 丰富一行取决于 Spark SQL 中另一行中的值
- python - 无法使用 sqlalchemy 调用存储过程?