【问题标题】:Creating a window in Qt outside of main()?在 main() 之外的 Qt 中创建一个窗口?
【发布时间】:2011-09-30 23:15:36
【问题描述】:

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

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

}

【问题讨论】:

    标签: c++ qt user-interface qwidget


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这很有意义!
    猜你喜欢
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多