Gleyak
Gleyak

Reputation: 564

Opening a Window with a QPushButton C++

I'm new to Qt Creator and I'm trying to build a first window with a button that open a new window. I've followed many tutorial that ended up with the same problem:

QObject::connect: No such signal QPushButton::click() in ../Gestion_Travaux/MainWindow.cpp:23

So there is my code:

Main.cpp

   #include <QApplication>
   #include "MainWindow.h"


    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);

        MainWindow frame;
        frame.show();

        return app.exec();
    }

MainWindow.h

  #ifndef MAINWINDOW_H
  #define MAINWINDOW_H
  #include <QApplication>
  #include <QWidget>
  #include <QPushButton>
  #include "NewJobWindow.h"

  class MainWindow : public QWidget // On hérite de QWidget (IMPORTANT)
  {
      public:
      MainWindow(); //Fenetre principale

      public slots:
      void OpenNew();


      private:
      QPushButton *m_NewJob; 
      QPushButton *m_OldJob; 
      NewJobWindow *m_NewJobWindow;
    };


#endif // MAINWINDOW_H

MainWindow.cpp

#include "MainWindow.h"
#include "NewJobWindow.h"
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLCDNumber>
#include <QSlider>

MainWindow::MainWindow() : QWidget()
{
    setFixedSize(500, 500);

    // Construction du bouton nouveau travail
    m_NewJob = new QPushButton("Nouveau Travail", this);
    m_NewJob->setCursor(Qt::PointingHandCursor);
    m_NewJob->setGeometry(30,30,140,30);

    // Construction du bouton nouveau travail
    m_OldJob = new QPushButton("Travail archive", this);
    m_OldJob->setCursor(Qt::PointingHandCursor);
    m_OldJob->setGeometry(30,70,140,30);

    connect(m_NewJob, SIGNAL(click()), this, SLOT(openNew()));
}

void MainWindow::OpenNew()
{
    m_NewJobWindow= new NewJobWindow(); // Be sure to destroy you window somewhere
    m_NewJobWindow->show();

}

NewJobWindow.h

#ifndef NEWJOBWINDOW_H
#define NEWJOBWINDOW_H


#include <QApplication>
#include <QWidget>
#include <QPushButton>

class NewJobWindow : public QWidget // On hérite de QWidget (IMPORTANT)
{
    public:
    NewJobWindow(); //Fenetre de nouveau travail

    public slots:


    private:
};


#endif // NEWJOBWINDOW_H

NewJobWindow.cpp

#include "NewJobWindow.h"

NewJobWindow::NewJobWindow() : QWidget()
{
    setFixedSize(500, 500);

};

I am sill looking for my error ... Any idea? Thanks

Upvotes: 1

Views: 1528

Answers (1)

frogatto
frogatto

Reputation: 29285

  • Replace

    connect(m_NewJob, SIGNAL(click()), this, SLOT(openNew()));
    

    with

    connect(m_NewJob, SIGNAL(clicked()), this, SLOT(openNew()));
    
  • Add Q_OBJECT macro in the beginning of your both classes.

    class MainWindow : public QWidget // On hérite de QWidget (IMPORTANT)
    {
        Q_OBJECT
        ...
    

    and

    class NewJobWindow : public QWidget // On hérite de QWidget (IMPORTANT)
    {
        Q_OBJECT
        ...
    
  • Run qmake via Build -> run qmake.

Upvotes: 2

Related Questions