C++ 如何在QTextEdit面板中附加select查询结果?
我在一个项目中工作,我需要执行一个select查询(我使用sqlite作为sql引擎)并将结果加载到QTextEdit(我使用QT作为图形界面)。C++ 如何在QTextEdit面板中附加select查询结果?,c++,qt,sqlite,C++,Qt,Sqlite,我在一个项目中工作,我需要执行一个select查询(我使用sqlite作为sql引擎)并将结果加载到QTextEdit(我使用QT作为图形界面)。 目前,我只编写了以下代码(但我仍停留在需要将结果附加到QTextEdit的部分): //将查询打印到控制台的回调函数 int db_files::CallBack(void*notUsed,int argc,char**argv,char**azColName){ 有关(int i=0;i的详细信息,请参阅中的sqlite3\u exec()函数的概
目前,我只编写了以下代码(但我仍停留在需要将结果附加到QTextEdit的部分):
//将查询打印到控制台的回调函数
int db_files::CallBack(void*notUsed,int argc,char**argv,char**azColName){
有关(int i=0;i的详细信息,请参阅中的sqlite3\u exec()
函数的概要:
如您所见,第4个参数是一个用户定义的参数,将传递给callback()
函数
因此,您也需要使用它与您的呼叫代码交互:
//Callback function to print the query to the console
int db_files::CallBack(void *myQTextEdit, int argc, char **argv, char **azColName) {
QTextEdit* qTextEdit = (QTextEdit*)myQTextEdit;
for(int i = 0; i<argc; i++) {
// Add the results to qTextEdit as needed ...
}
return 0;
}
这是C-style API在回调函数中与用户代码交互的一种非常常见的方式。能否请您使用缩进正确地格式化代码,以便我们能够轻松阅读?此外,您的代码中没有QTextEdit,因此我们无法知道在何处追加。我是否正确地假设您希望以缩进方式将您的printf追加到终端QTextEdit?我在运行代码时遇到两个错误:第一个是从void到QTextEdit的转换(在回调函数中)…似乎没有一个方法来执行该转换。第二个问题是在第四个参数(在sqlite3_exec函数中)中,&myQTextEdit未被识别…@zDoes“&myQTextEdit未被识别”当然,你必须把你的QTextEdit
控制成员的名字放在那里。你不能期望你拿我的例子来说,它是开箱即用的。这只是为了向你解释它的工作原理。谢谢,我没有看到它……但是在回调函数中,QTextEdit*QTextEdit=(QTextEdit)myQTextEdit;仍然生成强制转换错误…@zDoes抱歉,这是我示例中的一个输入错误,应该是:(QTextEdit*)myQTextEdit;
。谢谢!您的解决方案有效…您保存了我的项目!:D
int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
//Callback function to print the query to the console
int db_files::CallBack(void *myQTextEdit, int argc, char **argv, char **azColName) {
QTextEdit* qTextEdit = (QTextEdit*)myQTextEdit;
for(int i = 0; i<argc; i++) {
// Add the results to qTextEdit as needed ...
}
return 0;
}
//Function where I open the database and run the query
void custHandler::show_all() {
rc = sqlite3_open("database.db", &db);
if(rc != SQLITE_OK) {
sqlite3_close(db);
exit(1);
}
sqlCust = "SELECT * FROM DB";
rc = sqlite3_exec(db, sqlCust, CallBack, &myQTextEdit, &ErrMsg);
// ^^^^^^^^^^^^
if (rc != SQLITE_OK) {
exit(1);
}
sqlite3_free(ErrMsg);
sqlite3_close(db);
}