qtablewidget或sql中的c++矩阵

iecba09b  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(434)

我需要创建一个图邻接矩阵,我首先想创建一个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);

矩阵

p1tboqfb

p1tboqfb1#

我不完全理解你的意图。但我假设您在数据库中存储了一个使用列的表的图形 node1, node2, edge . 现在需要一个显示邻接矩阵的表。
我建议使用 QAbstractTableModel 对于输出表,通过从2d数组中提供数据。然后使用 QSqlTableModel .
一些关于:
继承抽象类 QAbstractTableModel 去上课 MyModel 添加一个静态二维数组或向量。覆盖 data 具有以下功能

QVariant data(const QModelIndex & index, int role = Qt::DisplayRole){
    return QVariant(MyModel::array[index.row()][index.column()]);
}

此外,还必须填充二维数组

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 在你的table上。最好使用int,但如果有必要,可以使用另一个字符串数组来存储这些字符串 varchar 项目并Map它们。

相关问题