私は1つのテーブルに接続するSQLモデルを持っていますが、このテーブルはプログラムの実行中の特定の条件に応じて列の数を変更します。モデルはQTableViewに接続されています。 私はモデルの情報を更新するためにmodel-> select()、tableView-> reset()を呼び出す関数の最後に列の数を制御する関数を持っています。列を追加または削除するビュー。 問題は、元の列数からビューが変更されないことです。私は数を減らす場合、私はデータが変更され、欠落している列に空を表示することがわかります。 tableViewがそれ自身のサイズを変更するコマンドがありますか? 私はテーブルを読んでいるクラスのコンストラクタで質問 を編集し、ビューに設定:QSqlTableModel、QTableView変更列が更新されません
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);
}
}
そして、ヘッダファイルが更新され、ここで私はテーブルビューが再描画されることが考えどこです:
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();
}
コードを表示してください。 – eyllanesc
かなり大きなプログラムです。必要に応じてサンプルを作成できます – Dan3460
@ Dan3460、質問を編集して[MCVE](https://stackoverflow.com/help/mcve)を追加する必要があります。 。 。 – Mike