使用QPushButton C ++打开一个窗口

时间:2016-02-24 15:34:41

标签: c++ qt

我是Qt Creator的新手,我正在尝试使用一个打开新窗口的按钮构建第一个窗口。我遵循了很多教程,结果遇到了同样的问题:

QObject :: connect:没有这样的信号QPushButton :: click()in ../ Gestion_Travaux / MainWindow.cpp:23

所以有我的代码:

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);

};

我正在寻找我的错误...... 任何的想法? 感谢

1 个答案:

答案 0 :(得分:2)

  • 替换

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

    connect(m_NewJob, SIGNAL(clicked()), this, SLOT(openNew()));
    
  • 在两个类的开头添加Q_OBJECT宏。

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

    class NewJobWindow : public QWidget // On hérite de QWidget (IMPORTANT)
    {
        Q_OBJECT
        ...
    
  • 通过 Build - &gt;运行qmake运行qmake