2016-12-07 31 views
0

いくつかの設定を保存しているXMLから読み込み中のアプリケーションを作成しています。しかし、私がプロジェクトをビルドすると、すべてのソースがコピーされますが、環境設定ファイルはコピーされません!
RESOURCES += rsc.qrc

をそして、私はあるpreferences.xml
Qt - プロジェクトにファイルを追加する

QFile preferences(":/data/preferences.xml"); 
if(!preferences.exists()){ 
    preferences.open(QFile::WriteOnly); 
    preferences.write("abc"); 
    qDebug() << "Written"; 
} 
else { 
    qDebug() << "File exists"; 
} 

を開こうとするたびに私rsc.qrcは今

<!DOCTYPE RCC><RCC version="1.0"> 
<qresource> 
    <file>data/preferences.xml</file> 
    <file>data/gamedata.xml</file> 
</qresource> 
</RCC> 


が含まれています - 私は.PROファイルに以下を追加しました絶対に何も印刷されず、アプリケーションの残りの部分も動作を停止します。

+0

あなたは明確にしてくださいもらえますか? – demonplus

+0

@demonplus私が書いたコードにいくつか変更を加えました。私が間違っていることがあれば教えてください! – Zeokav

+0

ファイルは実際にデータフォルダにありますか(フォルダは存在しますか)?アプリケーションをデバッグできますか? – demonplus

答えて

0

あなたの例ではリソース部分を正しく使用していません。 アプリケーションをビルドした後、実行可能ファイルに埋め込まれているリソースに書き込もうとすると、ほとんどの場合動作しなくなります。読書は大丈夫ですが、執筆は定義によっては機能しません。

編集可能な設定ファイルが必要な場合は、実行ファイルとともに配布するか、QSettingsなどの設定を読み書きする別の方法を使用する必要があります。

ただし、QSettingsを使用するということは、デフォルト設定を使用する場合に値が存在しない場合に備えて、ロード機能ですべてのデフォルト設定を構成する必要があることを意味します。 Windows上でレジストリを使用することを意味します。

QSettingsのコンストラクタでINIファイル形式を強制的に使用するオプションがあります。これは、xmlファイルではなく既定の設定INIファイルを提供する場合に意味があります。

もっと複雑なデータを保存したい場合は、とにかくxmlファイルが必要な場合があります。そのため、設定ファイルをビルドパスにコピーする方法が必要です。これは、QMAKE_POST_LINKを使用してプロファイル内で行うことができます。

例:プロジェクトをビルドする際に、ソースファイルがコピーされる場所

COPY_CMD = "$$PWD\\data\\preferences.xml $$OUT_PWD\\release\\data\\preferences.xml" 
COPY_CMD = $${QMAKE_COPY} $$replace(COPY_CMD, "/", "\\") $$escape_expand(\\n\\t) 
QMAKE_POST_LINK += $$COPY_CMD 
関連する問題