【发布时间】:2017-07-25 21:17:18
【问题描述】:
我有一个连接单个表的SQL模型,这个表在程序执行过程中会根据一定的条件改变列数。该模型连接到 QTableView。 我有一个函数可以控制函数末尾的列数我调用了 model->select(),以更新模型和 tableView->reset() 的信息,我认为会重新排列查看添加或删除列。 问题是视图并没有改变它原来的列数。如果我减少数字,我可以看到数据发生变化并在缺失的列上显示为空。 tableView 是否有命令自行调整其大小? 编辑问题 在类的构造函数中,我正在读取表格并将其设置为视图:
header = new QSqlTableModel(parent,data->m_db);
header->setTable("C"+QString::number(markTime.toSecsSinceEpoch())+"T");
header->select();
ui->heading->setModel(header);
ui->heading->show();
每次更改列数都是一个SQL过程来更改列数:
void ImportProcess::copyTable(QString oldTable, QString newTable)
{
QSqlQuery queryOld, queryNew;
queryOld.prepare("select * from :oldTable");
queryOld.bindValue(":oldTable",oldTable);
queryOld.exec();
if(queryOld.record().isEmpty()==true) return; //Old table was empty, nothing to copy
int oldColumn=queryOld.record().count();
QString replaceLine="insert into "+newTable+" values(";
while(queryOld.next()==true)
{
replaceLine.append(QString::number(queryOld.value(0).toInt()));
replaceLine.append(", "+queryOld.value(1).toString());
for(int y=0;y<(oldColumn < ui->columns->value() ? oldColumn : ui->columns->value());y++)
{
replaceLine.append(", "+QString::number(queryOld.value(y+2).toFloat()));
}
replaceLine.append(")");
queryNew.exec(replaceLine);
}
}
然后头文件更新了,这里是我以为tableview要重绘的地方:
void ImportProcess::updateHeadingTable()
{
QSqlQuery query;
query.exec("delete from C"+QString::number(markTime.toSecsSinceEpoch())+"T");
QString description= ui->Week->isChecked() == true ? "Week" : "Size";
query.exec("insert into C"+QString::number(markTime.toSecsSinceEpoch())+"T (id, description) values (101, '"+description+"')");
for(int x=0;x<ui->columns->value();x++)
{
query.exec("update C"+QString::number(markTime.toSecsSinceEpoch())+"T set col"+QString::number(x)+" = '30'");
}
header->select();
ui->heading->reset();
}
【问题讨论】:
-
请出示您的代码。
-
这是一个相当大的程序。如果需要,我可以制作样品
-
@Dan3460,您需要编辑您的问题并添加MCVE。 . .
-
为了改进您的问题,您应该阅读以下内容:stackoverflow.com/help/how-to-ask
标签: qt