Bonjour,
J'ai déjà rencontré ce problème et j'avais abandonné. Mais comme je n'aime pas rester sur un échec, je m'y remet avec un vieux projet que certain connaisse bien.
Je fais mon interface graphique avec QtDesigner. J'ai donc des fichiers .ui qui devrait donner des headers. Seulement, ça ne fonctionne pas, ça ne le fais pas automatiquement… Voici la commande que je dois rentrer (je tourne sous Ubuntu) :
1 | ./.Qt/5.5/gcc_64/bin/uic Documents/lab/Qt/OpenPlane/AirplaneEditor.ui -o ui_AirplaneEditor.h |
En effet, quand je demande juste uic :
1 | uic: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/uic': No such file or directory |
Je me dit que c'est peut être pour ça que Qt Creator ne me transforme pas automatiquement mes fichiers en headers. Pourtant, tous les kit mènent bien à cette version de Qt et Qt Versions, dans les options > Build & run, ne me propose que /home/louis/.Qt/5.5/gcc_64/bin/qmake, donc Qt reconnaît bien cette version, il ne devrait avoir aucun problème pour trouver uic.
Deuxième problème, mon header compilé à la main ne fonctionne toujours pas. Fin à vrai dire je ne comprend pas. Voici l'erreur que j'obtiens à la compilation :
1 2 3 | /home/louis/Documents/lab/Qt/OpenPlane/AirplaneEditor.cpp:6: error: invalid use of incomplete type 'class Ui::AirplaneEditor' ui(new Ui::AirplaneEditor) ^ |
Voici à quoi il ressemble :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #ifndef UI_AIRPLANEEDITOR_H #define UI_AIRPLANEEDITOR_H #include <QtCore/QVariant> #include <QtWidgets/QAction> #include <QtWidgets/QApplication> #include <QtWidgets/QButtonGroup> #include <QtWidgets/QDialog> #include <QtWidgets/QFormLayout> #include <QtWidgets/QHBoxLayout> #include <QtWidgets/QHeaderView> #include <QtWidgets/QLabel> #include <QtWidgets/QLineEdit> #include <QtWidgets/QPushButton> #include <QtWidgets/QWidget> QT_BEGIN_NAMESPACE class Ui_Dialog { public: QWidget *formLayoutWidget; QFormLayout *formLayout; QLabel *registrationLabel; QLineEdit *registrationLineEdit; QLabel *typeLabel; QLineEdit *typeLineEdit; QWidget *horizontalLayoutWidget; QHBoxLayout *horizontalLayout; QPushButton *okButton; QPushButton *cancelButton; void setupUi(QDialog *Dialog) { if (Dialog->objectName().isEmpty()) Dialog->setObjectName(QStringLiteral("Dialog")); Dialog->resize(435, 334); formLayoutWidget = new QWidget(Dialog); formLayoutWidget->setObjectName(QStringLiteral("formLayoutWidget")); formLayoutWidget->setGeometry(QRect(10, 10, 181, 61)); formLayout = new QFormLayout(formLayoutWidget); formLayout->setObjectName(QStringLiteral("formLayout")); formLayout->setContentsMargins(0, 0, 0, 0); registrationLabel = new QLabel(formLayoutWidget); registrationLabel->setObjectName(QStringLiteral("registrationLabel")); formLayout->setWidget(0, QFormLayout::LabelRole, registrationLabel); registrationLineEdit = new QLineEdit(formLayoutWidget); registrationLineEdit->setObjectName(QStringLiteral("registrationLineEdit")); formLayout->setWidget(0, QFormLayout::FieldRole, registrationLineEdit); typeLabel = new QLabel(formLayoutWidget); typeLabel->setObjectName(QStringLiteral("typeLabel")); formLayout->setWidget(1, QFormLayout::LabelRole, typeLabel); typeLineEdit = new QLineEdit(formLayoutWidget); typeLineEdit->setObjectName(QStringLiteral("typeLineEdit")); formLayout->setWidget(1, QFormLayout::FieldRole, typeLineEdit); horizontalLayoutWidget = new QWidget(Dialog); horizontalLayoutWidget->setObjectName(QStringLiteral("horizontalLayoutWidget")); horizontalLayoutWidget->setGeometry(QRect(10, 80, 186, 31)); horizontalLayout = new QHBoxLayout(horizontalLayoutWidget); horizontalLayout->setObjectName(QStringLiteral("horizontalLayout")); horizontalLayout->setContentsMargins(0, 0, 0, 0); okButton = new QPushButton(horizontalLayoutWidget); okButton->setObjectName(QStringLiteral("okButton")); horizontalLayout->addWidget(okButton); cancelButton = new QPushButton(horizontalLayoutWidget); cancelButton->setObjectName(QStringLiteral("cancelButton")); horizontalLayout->addWidget(cancelButton); retranslateUi(Dialog); QMetaObject::connectSlotsByName(Dialog); } // setupUi void retranslateUi(QDialog *Dialog) { Dialog->setWindowTitle(QApplication::translate("Dialog", "Airplane Editor", 0)); registrationLabel->setText(QApplication::translate("Dialog", "Registration", 0)); typeLabel->setText(QApplication::translate("Dialog", "Type", 0)); okButton->setText(QApplication::translate("Dialog", "Ok", 0)); cancelButton->setText(QApplication::translate("Dialog", "Cancel", 0)); } // retranslateUi }; namespace Ui { class Dialog: public Ui_Dialog {}; } // namespace Ui QT_END_NAMESPACE #endif // UI_AIRPLANEEDITOR_H |
Il me semble que ce sont les lignes surlignées qui posent problème.
Et voici son implémentation :
Le header :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #ifndef AIRPLANEEDITOR_H #define AIRPLANEEDITOR_H #include <QDialog> namespace Ui { class AirplaneEditor; } class AirplaneEditor : public QDialog { Q_OBJECT public: explicit AirplaneEditor(QWidget *parent = 0); ~AirplaneEditor(); private: Ui::AirplaneEditor *ui; }; #endif // AIRPLANEEDITOR_H |
Le cpp :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include "AirplaneEditor.h" #include "ui_AirplaneEditor.h" AirplaneEditor::AirplaneEditor(QWidget *parent) : QDialog(parent), ui(new Ui::AirplaneEditor) { ui->setupUi(this); } AirplaneEditor::~AirplaneEditor() { delete ui; } |
Merci de votre aide, j'espère vraiment que vous saurez trouver une solution à mon problème !