【发布时间】:2018-07-17 12:16:37
【问题描述】:
我是 QT 新手,遇到了一个奇怪的问题。我有一个使用 QSQLquery 填充 qtableview 的程序。从睡眠或屏幕保护程序唤醒后返回桌面(Windows 10)后,qtableview 为空白。
刷新查询(我有一个按钮)不能修复 qtableview,SQL 连接仍然显示为活动,并且没有生成任何错误消息(来自 SQL 服务器)并且其他所有内容(下拉列表、文本框等)显得正常。
编辑
感谢大家的帮助和cmets!
我花了一些时间试图重现该错误,该问题与屏幕保护程序/从睡眠中唤醒无关。一段时间后(20 - 30 分钟),表格视图将变为空白。我还是不明白为什么会这样?我是不是用错了指针?
再次感谢任何帮助,下面 qtbaleview 的代码,我的连接字符串在我的 mainwindow.h 中;
MainWindow conn;
if(!conn.connOpen())
ui->label_sec_status->setText("<font color='red'>Failed to Open
Database</font>");
else
ui->label_sec_status->setText("<font color='green'>Connected</font>");
QSqlQueryModel * modal=new QSqlQueryModel();
QSqlQueryModel * modal2=new QSqlQueryModel();
QSqlQueryModel * modal3=new QSqlQueryModel();
QSqlQuery* qry=new QSqlQuery(conn.mydb);
QSqlQuery* qry2=new QSqlQuery(conn.mydb);
QSqlQuery* qry3=new QSqlQuery(conn.mydb);
qry->prepare("select top 100 * from [dbo].[LOG] order by DEAL_NO DESC");
qry2->prepare("select MNGR from [dbo].[Staff]");
qry3->prepare("select SalesP from [dbo].[Sales]");
qry->exec();
qry2->exec();
qry3->exec();
modal->setQuery(*qry);
modal2->setQuery(*qry2);
modal3->setQuery(*qry3);
ui->tableView->setModel(modal); // table view
ui->tableView->resizeColumnsToContents();
ui->tableView->setAlternatingRowColors(true);
ui->tableView->setStyleSheet("alternate-background-color: #99ceff; background-color: #f2f2f2;");
ui->combo_BUSN_MNGR->setModel(modal2); // combo box
ui->combo_SP_NAME->setModel(modal3); // combo box
delete qry; // release memory?
delete qry2;
delete qry3;
// conn.connClose(); // moved to destructor
qDebug() << (modal->rowCount());
}
【问题讨论】:
-
在我看来这是一个错误,报告它。
-
我在使用 QT 5.9.1 时没有遇到问题,所以从 5.11 回滚并重新编译,但它仍然会发生。当我使用 windeployqt 时,它会下载/更新到较新的 .dll 吗?
-
您提供的信息很少,很难说...您尝试过调试吗?将调试器附加到正在运行的进程并检查您的内部数据缓冲区。您可以尝试在小部件上调用
update或updateGeometry,甚至删除并重新创建它... -
表格视图是否完全为空,或者它具有正确的行数和列数,但所有单元格都是空的?
-
它具有正确的列标题和布局,但单元格为空白。当您尝试刷新查询/表格视图时,它只会变成一个空的灰色方块。