Der*_*ltz 3 c++ user-interface qt 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();
}
Run Code Online (Sandbox Code Playgroud)
Calculator.h
class Calculator {
public:
Calculator();
};
Run Code Online (Sandbox Code Playgroud)
Calculator.cpp
#include <QtGui>
#include "Calculator.h"
Calculator::Calculator() {
QWidget window;
window.show();
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,你有两个独立的错误:)
window是构造函数中的局部变量,一旦构造函数退出,就会超出范围(因此会被销毁).您必须使用持久对象(在函数退出后生存的对象),例如成员Calculator.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();
}
Run Code Online (Sandbox Code Playgroud)