在Qt中如何在main()之外创建窗口?

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

Calculator.h

class Calculator {
    public:
        Calculator();
};

Calculator.cpp

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

Calculator::Calculator() {

    QWidget window;
    window.show();

}
1个回答

9
有趣的是,这里有两个不同的错误 :)
  1. window 是构造函数中的局部变量,在构造函数退出时超出作用域(因此被销毁)。您必须使用持久化对象(在函数退出后仍然存在的对象),例如 Calculator 的成员。
  2. main 中,代码 Calculator calculator(); 声明了一个返回 Calculator 的函数 calculator。这是在 C++ 中实例化默认构造对象时常见的陷阱。在这种情况下,括号是不必要的(并且有害的)。

要解决这两个错误:

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

谢谢!这很有道理! - Derek Schultz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接