Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] QDialog

j'en peut plus ^^

Sujet résolu
    28 mai 2008 à 14:51:29

    Bonjour ,

    ba voila j'ai tenter X trucs et rien a faire , sa marche pas , j'ai un problème avec mon QDialog , j'ai des tonnes d'erreur dé que dlg (QDialog) est mit quelque part , alors pouvez vous m'aidez ? voici mes codes nécessaires

    #include <QApplication>
    #include <QtGui>
    #include <QtSql>
     
    class MaFenetre : public QWidget
    {
        Q_OBJECT
     
        public:
        MaFenetre();
    	QDialog *dlg;
    	QPushButton *plus;
    	QPushButton *quiit;
    	QPushButton *valid;
    	QGridLayout *vbox;
    	QLineEdit *lineEdit3;
    	QLineEdit *lineEdit2;
    	QLineEdit *lineEdit1;
    	QLineEdit *lineEdit4;
    	QPushButton *info;
        QTableWidget *tableur;
    	QGridLayout *layout;
    	QTableWidgetItem *newItem;
    	
    	public slots:
    	void slot_accept();
    	void slot_exec();
    	void infor();
    };
     
    #endif
    


    #include "MaFenetre.h"
     
    MaFenetre::MaFenetre() : QWidget()
    {	
    	int cols, rows, rowsmax, colsmax;
    	cols = 1;
    	rows = 1;
    	colsmax = 6;
    	rowsmax = 1;
    	
    	QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName(":memory:");
    	if (!db.open()) {
            QMessageBox::warning(this, "SQLite Error", "Impossible de se connecter a SQLite");
        }
        QSqlQuery query;
    	query.exec("CREATE TABLE test ( id INT(11) PRIMARY KEY, id_inc INT(11) , act TEXT , mois INT(11) , years INT(11) , real INT(11) , note TEXT )");
    	query.exec("CREATE INDEX test_id_inc ON test(id_inc)");
    	query.exec("INSERT INTO test VALUES (NULL, '2045', 'Ramonage', '3', '1992', '0', NULL)");
    	query.exec("INSERT INTO test VALUES (NULL, '2010', 'Ramonage', '5', '2001', '1', NULL)");
    	query.exec("INSERT INTO test VALUES (NULL, '2008', 'Hotes & Moteur', '8', '2005', '1', 'Nouveau moteur de modèle X504')");
    	query.exec("INSERT INTO test VALUES (NULL, '1578', 'Dégraissage', '1', '2004', '0', 'Beaucoup de boulot')");
    
    		dlg = new QDialog(this);
    		lineEdit1 = new QLineEdit("ID contrat");
    		lineEdit2 = new QLineEdit("Mois (ex: 3)");
    		lineEdit3 = new QLineEdit("Years (ex: 1998)");
    		lineEdit4 = new QLineEdit("Activitée(s)");
    		valid = new QPushButton("Valider", &dlg);
    		quiit = new QPushButton("Fermer", &dlg);
    		vbox = new QGridLayout(&dlg);
    		vbox->addWidget(lineEdit1, 0, 0, 1, 2);
    		vbox->addWidget(lineEdit2, 1, 0, 1, 2);
    		vbox->addWidget(lineEdit3, 2, 0, 1, 2);
    		vbox->addWidget(lineEdit4, 3, 0, 1, 2);
    		vbox->addWidget(valid, 4, 0, 1, 1);
    		vbox->addWidget(quiit, 4, 1, 1, 1);
    		dlg->setLayout(vbox);
    	
    	plus = new QPushButton("Ajouter", this);
    	info = new QPushButton("Informations", this);
        QObject::connect(plus, SIGNAL(clicked()), this, SLOT(slot_exec()));
        QObject::connect(info, SIGNAL(clicked()), this, SLOT(infor()));
    	QObject::connect(quiit, SIGNAL(clicked()), &dlg, SLOT(slot_accept()));
    	
    	tableur = new QTableWidget(this);
    	tableur->setRowCount(rowsmax);
        tableur->setColumnCount(colsmax);
    	
    	QColor titleBackground(Qt::lightGray);
        QFont titleFont = tableur->font();
        titleFont.setBold(true);
    	
        newItem = new QTableWidgetItem();
        tableur->setItem(0,0,newItem);
        newItem->setText("ID");
    	newItem->setFont(titleFont);
    	newItem->setBackgroundColor(titleBackground);
        newItem = new QTableWidgetItem();
        tableur->setItem(0,1,newItem);
        newItem->setText("Mois");
    	newItem->setFont(titleFont);
    	newItem->setBackgroundColor(titleBackground);
        newItem = new QTableWidgetItem();
        tableur->setItem(0,2,newItem);
        newItem->setText("Years");
    	newItem->setFont(titleFont);
    	newItem->setBackgroundColor(titleBackground);
        newItem = new QTableWidgetItem();
        tableur->setItem(0,3,newItem);
        newItem->setText("Activitée");
    	newItem->setFont(titleFont);
    	newItem->setBackgroundColor(titleBackground);
    	newItem = new QTableWidgetItem();
        tableur->setItem(0,4,newItem);
        newItem->setText("Réalisé");
        newItem->setFont(titleFont);
    	newItem->setBackgroundColor(titleBackground);
    	newItem = new QTableWidgetItem();
        tableur->setItem(0,5,newItem);
        newItem->setText("Note");
        newItem->setFont(titleFont);
    	newItem->setBackgroundColor(titleBackground);	
    
        QSqlQuery query2("SELECT id,id_inc,mois,years,act,real,note FROM test");
    	while (query2.next()) {			
    	QString id_inc = query2.value(1).toString();
    	QString mois = query2.value(2).toString();
    	QString years = query2.value(3).toString();
    	QString act = query2.value(4).toString();
    	QString real = query2.value(5).toString();
    	QString note = query2.value(6).toString();
    	
    	rowsmax++;
    	tableur->setRowCount(rowsmax);
    	
        newItem = new QTableWidgetItem();
        tableur->setItem(rows,0,newItem);
        newItem->setText(id_inc);
        newItem = new QTableWidgetItem();
        tableur->setItem(rows,1,newItem);
        newItem->setText(mois);
        newItem = new QTableWidgetItem();
        tableur->setItem(rows,2,newItem);
        newItem->setText(years);
        newItem = new QTableWidgetItem();
        tableur->setItem(rows,3,newItem);
        newItem->setText(act);
    	newItem = new QTableWidgetItem();
        tableur->setItem(rows,4,newItem);
        newItem->setText(real);
    	newItem = new QTableWidgetItem();
        tableur->setItem(rows,5,newItem);
        newItem->setText(note);
    	
    	rows++;
    		}
    	
        layout = new QGridLayout;
        layout->addWidget(plus, 0, 0);
        layout->addWidget(info, 0, 1);
        layout->addWidget(tableur, 1, 0, 1, 2);
    	setLayout(layout);
    
    
    
    	
    }
    
    void MaFenetre::slot_exec()
    {
    dlg->exec();
    }
    
    void MaFenetre::slot_accept()
    {
    dlg->accept();
    }
    
    void MaFenetre::infor()
    {
    QMessageBox::information(this, "Informations", "Version 1.0 By A.Mille (Programmer en C++ & Qt 4.3 utilisant SQLite)");
    }
    


    Merci ^^ Cordialement Apocalypse III
    • Partager sur Facebook
    • Partager sur Twitter
      28 mai 2008 à 15:00:09

      Salut, pourrais-tu nous éclairer sur les erreurs, ce que le compilateur te donne, car là je ne vois pas trop où chercher ton problème.
      Merci
      • Partager sur Facebook
      • Partager sur Twitter
        28 mai 2008 à 15:24:18

        ba voila le résultat de mon compilateur

        Citation : Compilateur

        mingw32-make -f Makefile.Release
        mingw32-make[1]: Entering directory `C:/Users/Proprietaire/Desktop/mpi/sql'
        g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT
        -DQT_DLL -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPO
        RT -DQT_NEEDS_QMAIN -I"c:\Qt\4.3.4\include\QtCore" -I"c:\Qt\4.3.4\include\QtCore
        " -I"c:\Qt\4.3.4\include\QtGui" -I"c:\Qt\4.3.4\include\QtGui" -I"c:\Qt\4.3.4\inc
        lude\QtSql" -I"c:\Qt\4.3.4\include\QtSql" -I"c:\Qt\4.3.4\include" -I"." -I"c:\Qt
        \4.3.4\include\ActiveQt" -I"release" -I"." -I"c:\Qt\4.3.4\mkspecs\win32-g++" -o
        release\MaFenetre.o MaFenetre.cpp
        MaFenetre.cpp: In constructor `MaFenetre::MaFenetre()':
        MaFenetre.cpp:29: error: no matching function for call to `QPushButton::QPushBut
        ton(const char[8], QDialog**)'
        c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:112: note: candida
        tes are: QPushButton::QPushButton(const QPushButton&)
        c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:68: note:
        QPushButton::QPushButton(const QIcon&, const QString&, QWidget*)
        c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:67: note:
        QPushButton::QPushButton(const QString&, QWidget*)
        c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:66: note:
        QPushButton::QPushButton(QWidget*)
        MaFenetre.cpp:30: error: no matching function for call to `QPushButton::QPushBut
        ton(const char[7], QDialog**)'
        c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:112: note: candida
        tes are: QPushButton::QPushButton(const QPushButton&)
        c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:68: note:
        QPushButton::QPushButton(const QIcon&, const QString&, QWidget*)
        c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:67: note:
        QPushButton::QPushButton(const QString&, QWidget*)
        c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:66: note:
        QPushButton::QPushButton(QWidget*)
        MaFenetre.cpp:31: error: no matching function for call to `QGridLayout::QGridLay
        out(QDialog**)'
        c:/Qt/4.3.4/include/QtGui/../../src/gui/kernel/qgridlayout.h:146: note: candidat
        es are: QGridLayout::QGridLayout(const QGridLayout&)
        c:/Qt/4.3.4/include/QtGui/../../src/gui/kernel/qgridlayout.h:69: note:
        QGridLayout::QGridLayout()
        c:/Qt/4.3.4/include/QtGui/../../src/gui/kernel/qgridlayout.h:68: note:
        QGridLayout::QGridLayout(QWidget*)
        MaFenetre.cpp:44: error: no matching function for call to `MaFenetre::connect(QP
        ushButton*&, const char[11], QDialog**, const char[15])'
        c:/Qt/4.3.4/include/QtCore/../../src/corelib/kernel/qobject.h:196: note: candida
        tes are: static bool QObject::connect(const QObject*, const char*, const QObject
        *, const char*, Qt::ConnectionType)
        c:/Qt/4.3.4/include/QtCore/../../src/corelib/kernel/qobject.h:298: note:
        bool QObject::connect(const QObject*, const char*, const char*, Qt::Con
        nectionType) const
        mingw32-make[1]: *** [release/MaFenetre.o] Error 1
        mingw32-make[1]: Leaving directory `C:/Users/Proprietaire/Desktop/mpi/sql'
        mingw32-make: *** [release] Error 2

        • Partager sur Facebook
        • Partager sur Twitter
          28 mai 2008 à 15:29:20

          plus = new QPushButton("Ajouter", this);
          essaie
          plus = new QPushButton(QString("Ajouter"), this);
          (sur touts les boutons :p )

          MaFenetre.cpp:29: error: no matching function for call to `QPushButton::QPushBut
          ton(const char[8], QDialog**)
          '
          c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:112: note: candida
          tes are: QPushButton::QPushButton(const QPushButton&)
          c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:68: note:
          QPushButton::QPushButton(const QIcon&, const QString&, QWidget*)
          c:/Qt/4.3.4/include/QtGui/../../src/gui/widgets/qpushbutton.h:67: note:
          QPushButton::QPushButton(const QString&, QWidget*)
          • Partager sur Facebook
          • Partager sur Twitter
            28 mai 2008 à 15:33:15

            non sa n'est pas sa mais merci quand (même , j'ai essayé en appliquant sa a tout les bouton)
            • Partager sur Facebook
            • Partager sur Twitter
              28 mai 2008 à 15:37:10

              Ok, je vois l'erreur se trouve ici.
              dlg = new QDialog(this);
              		lineEdit1 = new QLineEdit("ID contrat");
              		lineEdit2 = new QLineEdit("Mois (ex: 3)");
              		lineEdit3 = new QLineEdit("Years (ex: 1998)");
              		lineEdit4 = new QLineEdit("Activitée(s)");
              		valid = new QPushButton("Valider", &dlg);
              		quiit = new QPushButton("Fermer", &dlg);
              

              Pour commencer, je te fais remarquer que tu as mis deux i à quiit.
              Ensuite, tu as appelé un constructeur qui n'existe pas, c'est à dire, dans dans toutes les surcharges du constructeur de QPushButton, le 2è paramètre n'est pas un QWidget. Voici le code sans cette erreur:
              dlg = new QDialog(this);
              		lineEdit1 = new QLineEdit("ID contrat");
              		lineEdit2 = new QLineEdit("Mois (ex: 3)");
              		lineEdit3 = new QLineEdit("Years (ex: 1998)");
              		lineEdit4 = new QLineEdit("Activitée(s)");
              		valid = new QPushButton("Valider");
              		quit = new QPushButton("Fermer");
                              connect(valid,SIGNAL(clicked()), dlg, SLOT(show()));
                              connect(quit,SIGNAL(clicked()), dlg, SLOT(show()));
              


              Tu dois utiliser un connect, il se peut qu'il y ait une autre erreur. Mais essaie ceci déjà. ;)
              Au revoir.
              • Partager sur Facebook
              • Partager sur Twitter
                28 mai 2008 à 15:41:51

                Merci sa bouge , la compilation marche mais la fermeture de dlg ne marche pas

                P.S: le quiit je l'avais fais exprès ^^

                EDIT: j'ai modifier show() par accept() pour fermeture et c'est ok , merci a vous ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  28 mai 2008 à 15:49:38

                  en fait en reprenant le code que tu as posté, tu passes &dlg à tes wiget, or, dlg est déjà un pointeur donc le & est en trop :
                  valid = new QPushButton("Valider", &dlg);
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [Qt] QDialog

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown