如何在QTextEdit面板中附加选择查询结果?

时间:2017-08-25 16:22:35

标签: c++ qt sqlite

我在一个需要执行select查询的项目中工作(我使用sqlite作为sql引擎)并将结果加载到QTextEdit中(我使用QT作为我的图形界面)。
现在我只写了下面的代码(但我坚持在需要将结果附加到QTextEdit的部分):

//Callback function to print the query to the console
int db_files::CallBack(void *notUsed, int argc, char **argv, char **azColName) {
    for(int i = 0; i<argc; i++) {
        printf("%s : %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    std::cout << "\n";
    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, 0, &ErrMsg);
      if (rc != SQLITE_OK) {
          exit(1);
      }
      sqlite3_free(ErrMsg);
      sqlite3_close(db);
}

也许我需要在回调功能中操作,但我不知道......有人可以向我解释一下吗?

编辑: 我有一个名为txtShow的QTextEdit变量,我通常通过ui->txtShow.insertPlainText("text");访问它

1 个答案:

答案 0 :(得分:1)

请参阅SqlLite documentation中的sqlite3_exec()函数概要:

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 */
);

如您所见,第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;
}

调用sqlite3_exec()函数时,传递:

//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);
}

这是C风格的API在回调函数中与用户代码交互的一种非常常见的方式。