web-dev-qa-db-ja.com

QtデザイナーがGUIを更新しない

誰かが以前にQtデザイナーでGUIを作成しましたが、今はいくつかの小さなパーツを変更する必要があります(ボタンや機能を追加するなど)。

前提:Designerで.uiファイルに新しい機能を追加/変更します。編集モードにすると、.uiファイルのxml形式が変更されることがわかります。

問題:Qtをビルドして実行すると、古いバージョンの.uiが表示されます(機能のアップグレードなし)。すべてをクリーニングしてqmakeを実行してみましたが、役に立ちませんでした。

なぜこれが起こっているのかについてのアイデアはありますか?

39
Chris

同じ問題があり、「プロジェクト」モードで「シャドウビルド」を無効にすると解決しました。

[〜#〜] upd [〜#〜]:この回答に対する賛成票をまだ受け取っていると、2つの理由で悲しくなります

  • 取るに足らない
  • 問題はほぼ5年後にまだそこにあります
105
ironic

Shadow Build構成を変更せずにこの問題を解決できました。私のプロジェクトでは、出力ファイルを使用してビルドしたいbuild-ProjectName-Debug

しかし、QtCreatorはファイルmoc_FileName.cppおよびui_FileName.hがビルドディレクトリにないかどうかをチェックするのは賢明ではありません。この問題は、これらのファイルmoc_FileName.cppおよびui_FileName.hがプロジェクトディレクトリにある場合、QtCreatorがそれらを使用し、認識しないために発生します。uiファイルに対する変更。

この問題の解決策は私にとって簡単でした:プロジェクトディレクトリからすべてのmoc_FileName.cppおよびui_FileName.hを削除し、Rebuild。これらのファイルはbuild-ProjectName-Debugに作成され、すべての変更はそこにあります。

11
user6284

.uiファイルを変更すると、誰かがそのファイルでuic.exeを実行してヘッダーファイルを生成する必要があります。たとえば、MyWindow.uiというウィンドウの場合、ui_MyWindow.hというファイルが生成されます。

これは、アプリケーションが再構築されるときに使用されます。

ビルド方法やOSを指定しないので、そのために役立つことは困難です。 Visual Studioを使用している場合は、.uiファイルをプロジェクトに統合して、.uiファイルを変更すると、生成されたすべてのファイルが自動的に再作成されるようにすることができます。 .priファイルを使用している場合も同様です。

いずれにせよ、私は実行します:

uic.exe -o ui_yourfile.h yourfile.ui

ファイルの名前を使用しているものに変更してください。 uic.exeはQt binディレクトリにあります。

次に、生成されたヘッダーファイルを取得したら、ビルドディレクトリのどこにあるかを探します。その後、再構築します。

9
Liz

私はこの問題をcleanthen buildで解決します。チェックした場合Shadow Build、qtCreatorは、ui_xxx.hが変更されている場合でも新しい.objを生成する以外に、古い.objを使用して、デバッグagin.My環境がqt5.5 + msvc2013のときに.exeを生成します。

3
Crawl.W

これは私を個人的に助けたものです、qmakeファイルに追加してください:UI_DIR = $$PWD

3
cen

私は同じ問題を抱えており、ビルドディレクトリ内のすべてのMakefileを削除してから、最初から再ビルドすることで解決できました。何らかの理由で、Qt CreatorからClean Projectを実行しても、これらのファイルは削除されません。

2
ishmael

ソースフォルダー内のすべての自動生成ファイルを削除しました。シャドウビルドをオフにすると、自動生成ファイルがソースフォルダーに作成されました。シャドウビルドをチェックした後、コンパイラーはソースフォルダーのgenファイルのみを使用します。そのため、すべての自動生成ファイル(ui _、moc _)を削除し、uiは常に更新されました。

1
TAK

同じ問題が発生しました:ビルド後にUIの変更は表示されませんでした。上記の問題は、UIファイルがリメイクされないことです。

シャドウビルドのチェックを外すと、問題は1回だけ解決されました。その後、その後のUIの変更を再び見ることができませんでした。そこで、シャドウビルドを再確認し、既存のシャドウビルドフォルダーを削除しました。すべてのビルドファイルを削除する限り、これは今でも一貫して機能します。しかし、それは不十分です。 UIの変更を検出し、ファイルを再作成できる必要があります。

これはQt Creator/Designerのバグとして記録する必要があると思います。

1
AKstat

私の場合、問題は.uiファイルの名前変更が原因でした。 Qt Creatorは、フォームに対応する.cppファイルのヘッダーファイル「ui_ [name_of_ui_file] .h」の#includeを更新しませんでした。とにかく、シャドウビルドフォルダー内のすべての "ui _ *。h"ファイルをクリーンアップすることで問題が解決しました([プロジェクト]タブで[シャドウビルド]をオフにすると同じ効果が得られると思います)。

1

私にとっても同じ問題です。 インストールをQt 5.0.2(MSVC 2010)からQt 5.0.2に変更した)まで何も機能しません(mingw)。今それは再び働いています...有線

1
maniax

システムの日付または時刻で遊んでいますか、それとも同僚のコンピューターとは異なりましたか?テストのために(そしてプロジェクトをコンパイルするために)時間を数時間後に変更し、現在の時間に復元した後、コンパイルされたファイルはコンパイル時間よりも新しいため更新されませんでした。 Cleanを実行しても、これらのファイルは削除されませんでした。 Shadow buildオプションを指定すると、クラッシュと追跡できない0xc0000135エラー。将来の日付/時刻が設定されたmoc _ *。oおよび* .cppファイルをビルドディレクトリから手動で削除し、プロジェクト全体を再度コンパイルすることが私にとっての解決策でした。

1
nuncaeslupus

次の行を.proファイルに追加します

   UI_DIR = $$PWD
0
Prayag k

上記のように、UIファイルは再作成されません。私にとって、最も簡単な解決策は、ビルドではなくリビルドを実行することです。毎回プロジェクトのサブメニューに入る必要はありません。プロジェクトが大きすぎない限り、これは問題ありません(これは別として、qtが長年にわたって抱えている厄介なバグです)。

0
transistor

私は同じ問題を抱えていましたが、.proファイルを手動で変更したことに気付きました。つまり、「違法」なものにしたのです-mainwindow.ui[〜# 〜] distfiles [〜#〜](デフォルトでは、すべての ui ファイルは[〜#〜] forms [〜#〜]の下にグループ化されます) 。

[〜#〜] forms [〜#〜]に戻り、すべてが正常に機能するようになりました

0
Shota Meladze