2017-08-25 6 views
0

私はselectクエリ(SQLエンジンとしてsqliteを使用します)を実行し、結果を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); 
} 

は、たぶん私は、コールバック関数で動作する必要があるが、私はドン:今私は、次のコードを書きました(私は、私はQTextEditに結果を追加する必要がある部分で立ち往生)については
どのように...誰かが私にそれを説明することができます知っている?

EDIT:

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

ご覧のとおり:私は、私は通常ui->txtShow.insertPlainText("text");

+0

簡単に読むことができるように、インデントでコードを適切にフォーマットしてください。さらに、QTextEditはコードのどこにもありませんので、どこに追加するのかわかりません。 QtextEditであなたがプリントしたものをターミナルに追加したいと思うのは正しいですか? – apalomer

答えて

1

ことによってそれをtxtShow呼ばQTextEdit変数にアクセスしている SqlLite documentationsqlite3_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; 
} 

それを渡す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はコールバック関数のユーザーコードとやりとりします。

+0

私はあなたのコードを実行する2つのエラーがあります:最初は(コールバック関数内の)voidからQTextEditへの変換です...それはそのキャストを行うメソッドがないようです。 2番目の問題は、(sqlite3_exec関数の)4番目の引数に&myQTextEditが認識されないことです... – zDoes

+0

@zDoes _ "&myQTextEditが認識されません" _ QTextEditコントロールのメンバーの名前をそこに入れる必要がありますもちろん。あなたは私の例を挙げることを期待することはできませんし、それは箱からすぐに実行されます。それがどのように働くのか原理をあなたに説明することでした。 – user0042

+0

ありがとう、私はそれを見ていない...しかし、コールバック関数でQTextEdit * qTextEdit =(QTextEdit)myQTextEdit;まだキャストエラーが発生しています... – zDoes

関連する問題