3

チュートリアルで行われているように、Qt で main() 関数の外にウィンドウを作成することは可能ですか? 私がここでやった彼らのやり方の何が問題なのですか?コンパイルしようとするとエラーは発生しませんが、ウィンドウが表示されません。ありがとう。

main.cpp

#include <QtGui>
#include "Calculator.h"

int main(int argc, char *argv[]) {
    QApplication application(argc, argv);
    Calculator calculator();
    return application.exec();
}

電卓.h

class Calculator {
    public:
        Calculator();
};

電卓.cpp

#include <QtGui>
#include "Calculator.h"

Calculator::Calculator() {

    QWidget window;
    window.show();

}
4

1 に答える 1

9

不思議なことに、ここには2つの別々のエラーがあります:)

  1. windowはコンストラクター内のローカル変数であり、コンストラクターが終了するとスコープ外になります(したがって破棄されます)。のメンバーなど、永続オブジェクト(関数の終了後に存在するオブジェクト)を使用する必要がありますCalculator
  2. mainで、コードはを返すCalculator calculator();関数を宣言します。これは、C++でデフォルトで構築されたオブジェクトをインスタンス化する際の一般的な落とし穴です。この場合、括弧は不要です(そして有害です)。calculatorCalculator

両方のエラーを修正するには:

class Calculator {
public:
    Calculator();
private:
    QWidget m_window;            // persistent member
};
Calculator::Calculator() {
    m_window.show();
}


int main(int argc, char *argv[]) {
    QApplication application(argc, argv);
    Calculator calculator;       // note, no () after calculator
    return application.exec();
}
于 2011-07-08T03:24:25.177 に答える