在main()之外的Qt中创建一个窗口?

时间:2011-07-08 03:16:35

标签: c++ qt user-interface qwidget

是否可以在main()函数之外的Qt中创建一个窗口,就像在教程中一样?我这样做的方式有什么问题?我尝试编译时没有错误,但窗口从未出现过。感谢。

的main.cpp

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

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

Calculator.h

class Calculator {
    public:
        Calculator();
};

Calculator.cpp

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

Calculator::Calculator() {

    QWidget window;
    window.show();

}

1 个答案:

答案 0 :(得分:9)

奇怪的是,这里有两个不同的错误:)

  1. window是构造函数中的局部变量,一旦构造函数退出,它就会超出范围(因此会被销毁)。您必须使用持久对象(在函数退出后生存的对象),例如Calculator的成员。
  2. main中,代码Calculator calculator();声明函数calculator返回Calculator。在C ++中实例化默认构造的对象时,这是一个常见的问题。在这种情况下,括号是不必要的(也是有害的)。
  3. 要解决这两个错误:

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