3

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

主文件

#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

奇怪的是,您在这里有两个单独的错误:)

  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();
}
于 2011-07-08T03:24:25.177 回答