1

QtSDK にリストされている Qt の例に従っています:「Qt を使用したプログラミングの開始」。私の問題は、プログラムがオブジェクトを表示しないことです。

私の main.cpp は次のようになります。

#include <QtGui>

#include <notepad.h>

int main(int argv, char **args)  {
    QApplication app(argv, args);

    QVBoxLayout layout;

    Notepad notepad();

    QWidget window;
    window.setLayout(&layout);

    window.show();

    return app.exec();
}

「notepad.h」ファイル:

#ifndef NOTEPAD_H
#define NOTEPAD_H

#include <QtGui>

class Notepad : public QMainWindow  {
    Q_OBJECT

    public:
        Notepad();

    private slots:
        void open();
        void save();
        void quit();

    private:
        QTextEdit *text_edit;

        QAction *open_action;
        QAction *save_action;
        QAction *exit_action;

        QMenu *file_menu;
};

#endif // NOTEPAD_H

「notepad.cpp」ファイル:

#include "notepad.h"

Notepad::Notepad()  {
    open_action = new QAction(tr("&Open"), this);
    save_action = new QAction(tr("&Save"), this);
    exit_action = new QAction(tr("&Exit"), this);

    connect(open_action, SIGNAL(triggered()), this, SLOT(open()));
    connect(save_action, SIGNAL(triggered()), this, SLOT(save()));
    connect(exit_action, SIGNAL(triggered()), qApp, SLOT(quit()));

    file_menu = menuBar()->addMenu(tr("&File"));
    file_menu->addAction(open_action);
    file_menu->addAction(save_action);
    file_menu->addSeparator();
    file_menu->addAction(exit_action);

    text_edit = new QTextEdit;
    setCentralWidget(text_edit);

    setWindowTitle(tr("Notepad"));
}

void Notepad::open()  {
    ...
}

void Notepad::save()  {
    ...
}

void Notepad::quit()  {
}

問題を解決するための助けをいただければ幸いです。

編集

私の最初の質問は、あなたが疑問に思っている場合に備えて、「終了」機能を実装していないためにコンパイル時エラーが発生した理由を尋ねました:)。

4

1 に答える 1

2

notepad.h でプライベート スロットとして定義された quit() メソッドを実装する必要があります。未解決のエラーはリンク エラーであり、リンカーが関数宣言の実装を見つけられなかったことを示します。これを notepad.cpp に追加します。

void Notepad::quit()  {
    ...
}

新しい質問の場合:

notepad.show() を試してください。MainWindow は QMainWindow であるため、メモ帳オブジェクトにすることができます。

int main(int argv, char **args)  {
    QApplication app(argv, args);

    Notepad notepad();
    notepad.show();

    return app.exec();
}
于 2012-09-16T06:50:47.080 に答える