1

親切に私をQtの新入生と考えてください。ボタンクリックイベント用に次のコードを記述しました。

void dbCheck ()
{
    db = QSqlDatabase::addDatabase("QSQLITE");

    QString dbPath(QDir::home().path());

    dbPath.append("/Desktop/jk/sample.sqlite");
    qDebug () <<"Path Name is "<<dbPath;
    .......
}

そしてしばらくして、私は次の行をに変更しました

dbPath.append("/Desktop/jk/Newsample.sqlite");

コードを実行しても、前のパス、つまり。が出力されますsample.sqlite

プロジェクトをクリーンアップし、同じものを再構築しましたが、使用できません。それでも同じ結果が得られます。本当に変だ。

私はここで何かを逃しましたか?この問題を修正するにはどうすればよいですか?キャッシュに関連するものはありますか?親切なアドバイス。

4

2 に答える 2

1

ソース内ビルドと「シャドウ ビルド」を混在させる場合は注意してください。ソース ディレクトリに移動して and を実行するqmakeと、インソース ビルドが得られますmake。一方、Qt Creator はデフォルトで別のビルド ディレクトリ、別名「シャドウ ビルディング」を使用します。もちろん、自分でそれを行うこともできます。実際には、ビルド ディレクトリをソース ディレクトリの兄弟qmakeとして作成し、そこに移動してシャドウ ビルド ディレクトリに makefile を生成することによってこれを行います。qmake ../myproject

ここで重要なことは、makeプログラムには別個のビルド ディレクトリという概念が実際にはありません。また、インソース ビルドを実行した場合は、それらのビルド ファイルにアクセスしてmake することもできます。次に、シャドウ ビルドを行っていると思われる場合、makeはソース ディレクトリの下にビルドされたファイルを見つけ、新しいファイルを作成する代わりにそれらを使用します。

これが問題の場合は、以下が役立ちます

Qt SDK コマンド プロンプトでソース ディレクトリに移動し、実行します。

make clean distclean

注: 順序は重要ですdistclean。メイクファイルも削除されるため、最後に実行する必要があります。makeまた、nmakeまたはmingw32-makeまたは実際に使用するものに置き換えます。そのコマンドでメイクファイルが見つからない場合は、おそらくqmakeそこで実行しておらず、問題は別のものですが、実行qmakeしてメイクファイルを生成することでこれを確認でき、動作しmake clean distcleanます。

バージョン管理を使用している場合 (および生成されたファイルを誤ってチェックインしていない場合)、余分なファイルを削除する代わりに、バージョン管理ツールを使用して、バージョン管理されたディレクトリから余分なファイルをすべて削除します。

于 2013-03-19T12:25:09.133 に答える
0

環境を再確認してください。本当にすべてをクリアしますか? 以前のビルドの*.o, moc_*.cpp,がないことを確認してください。ui_*.hファイルを削除.userし、プロジェクトを再構成して、別のフォルダーにビルドするようにしてください。

また、次の方法で文字列の連結を使用できます。

QString dbPath = QString("%1%2")
        .arg( QDir::home().path() )
        .arg( "/Desktop/jk/Newsample.sqlite" ) );

オフトップですが、ネイティブのセパレーターを忘れないでください( http://qt-project.org/doc/qt-4.8/qdir.html#separatorおよびhttp://qt-project.org/doc/qt-4.8/qdir .html#toNativeSeparators ) - クロスプラットフォーム ソフトウェアを作成する場合。

于 2013-03-19T11:41:56.450 に答える