私は3.5インチのLCDスクリーンを備えたRaspberryPiに取り組んでいます。タイトル バーのないキオスク モードで動作する Qt 5 ベースのアプリケーションがあります。アプリは 320x480 の画面全体を使用します。ユーザーがメイン ダイアログ ウィンドウのボタンをクリックしたときに表示される 2 つ目のダイアログを追加しようとしています。
各ダイアログは、Qt Designer を使用して設計されています。各ダイアログには*.ui
、ダイアログ サイズを設定し、ボタンを追加するファイルがあります。ファイルは*.ui
ヘッダーとソース ファイルに uic または moc されます。
$g++ -c -pipe -g3 -O1 -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_UITOOLS_
LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/x86_64
-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtUiTools -isystem /us
r/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/
qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -isystem /usr/in
clude/libdrm -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o dialog1.o
dialog1.cpp
In file included from dialog2.h:7:0,
from dialog1.h:8,
from dialog1.cpp:1:
ui_dialog2.h:22:7: error: redefinition of ‘class Ui_Dialog’
class Ui_Dialog
^~~~~~~~~
In file included from dialog1.h:7:0,
from dialog1.cpp:1:
ui_dialog1.h:22:7: note: previous definition of ‘class Ui_Dialog’
class Ui_Dialog
^~~~~~~~~
In file included from dialog2.h:7:0,
from dialog1.h:8,
from dialog1.cpp:1:
ui_dialog2.h:50:11: error: redefinition of ‘class Ui::Dialog’
class Dialog: public Ui_Dialog {};
^~~~~~
In file included from dialog1.h:7:0,
from dialog1.cpp:1:
ui_dialog1.h:50:11: note: previous definition of ‘class Ui::Dialog’
class Dialog: public Ui_Dialog {};
^~~~~~
Makefile:445: recipe for target dialog1.o failed
make: *** [dialog1.o] Error 1
問題は、*.ui ファイルの変換方法にあるようです。
$ cat ui_dialog1.h | tail -n 7
namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui
と:
$ cat ui_dialog2.h | tail -n 7
namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui
問題はわかっていますが、Qt ツールで修正する方法がわかりません。ツールは、ファイルごとに一意の名前空間または一意のクラス名を使用する必要があり*.ui
ます。
問題を解決するにはどうすればよいですか?
MCVE はNoloader |で入手できます。qt-ui-dialog GitHub。MCVE は次のように複製されます。
git clone https://github.com/noloader/qt-ui-dialog
問題は次の方法で再現できます。
cd qt-ui-dialog
make clean && qmake && make