1

メインウィンドウ.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

メインウィンドウ.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

main.cpp

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    QObject::connect(pushButton, SIGNAL(clicked()),
            &a, SLOT(quit()));

    return a.exec();
}

すべてのコードは上記のとおりです。一般的なQtのGUIプログラムで、UI FormにpushButtonを配置し、main.cppで使用してみました。しかし、以下のエラーが発生しました:

main.cpp:10: Error:'pushButton' was not declared in this scope

解決策を教えてください。main.cpp でどのように呼び出すことができますか? ありがとう!

補数 1 :

メインウィンドウ.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QObject::connect(ui->pushButton, SIGNAL(clicked()),
            QCoreApplication::instance(), SLOT(close()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

このようにすると、プログラムは実行できますが、アプリケーション全体を閉じることはできません。これは、コンストラクター段階で QApplication が存在しないために QCoreApplication::instance() が null を返すためだと思います。

補数 2 :

メインウィンドウ.cpp

void MainWindow::on_pushButton_clicked()
{
    close();
}

1 つの解決策は、上記のように、mainwindow.cpp に pushButton の新しいスロットを追加することです。しかし、それでも私は自分のやり方でそれを行う方法を知りたいと思っています (この投稿の主要部分)?

補足3:

Alberto のコードは、以下のようにQWidgetを使用することで正常に動作します。

ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));
4

1 に答える 1