我是QT的新手,遇到了一个奇怪的问题。我有一个程序,它使用QSQLquery来填充qtableview。从睡眠或屏幕保护程序唤醒后返回桌面(Windows 10)后,qtableview为空白。
刷新查询(我有一个按钮)不能修复qtableview,SQL连接仍然显示为活动状态,并且没有生成错误消息(来自SQL服务器)以及其他所有内容(下拉列表,文本框等)显得正常。
修改
感谢大家的帮助和评论!
我花了一些时间尝试重现错误,问题与屏幕保护程序/从睡眠中唤醒无关。经过一段时间(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());
}
答案 0 :(得分:0)
感谢大家的帮助和评论。该问题与代码无关,发现该问题与运行SQL Server的VM配置有关。