Pas de header généré avec uic

a marqué ce sujet comme résolu.

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 !

Tu as plusieurs possibilités. Peut-être que tu pourrais essayer de renseigner le chemin vers l'exécutable uic dans QtCreator de la même manière que c'est fait pour qmake. On sait jamais, ça pourrait bien marcher.

Tu peux aussi tenter de créer un lien symbolique au bon endroit mais c'est quand même assez sale je trouve. Pour le reste je sais pas. Sinon, comment ça se fait que Qt soit installé dans ton ~ ?

+0 -0

Justement, impossible de trouver où renseigner le chemin vers uic. J'ai pas l'impression que ce soit possible…

C'est bizarre que je sois obligé de passer par un lien symbolique alors qu'il arrive bien à me trouver qmake (uic et qmake sont dans le même dossier). Installation réalisée depuis l'exécutable du site, ça l'installe dans ~ par défaut (que j'ai laissé).

Merci de ton aide!

EDIT : au passage, si ça peut aider, voici le .pro du projet :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
QT += widgets

SOURCES += \
    main.cpp \
    Airplane.cpp \
    AirplaneOverview.cpp \
    AirplaneManager.cpp \
    AirplaneEditor.cpp

HEADERS += \
    Airplane.h \
    AirplaneOverview.h \
    AirplaneManager.h \
    AirplaneEditor.h \
    ui_AirplaneEditor.h # Généré à la main ;-)

FORMS += \
    AirplaneEditor.ui
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte