当前位置: 代码迷 >> QT开发 >> QT里调用函数有关问题
  详细解决方案

QT里调用函数有关问题

热度:60   发布时间:2016-04-25 04:01:14.0
QT里调用函数问题
请问大家,我写了一个简单的QT程序,比如显示hello world。
 int main(int argc, char *argv[])
 {
    QApplication app(argc, argv);

    QPushButton hello("");
    hello.setText(QObject::tr("Hello world!"));

    hello.resize(200, 100);
    hello.show();

    return app.exec();
 }

现在我想把
    QPushButton hello("");
    hello.setText(QObject::tr("Hello world!"));

    hello.resize(200, 100);
    hello.show();
这几句放到一个子函数里,在main里调用。就是改成这样

 void helloworld();

 int main(int argc, char *argv[])
 {
    QApplication app(argc, argv);
    
    helloworld();

    return app.exec();
 }

 void helloworld()
 {
    QPushButton hello("");
    hello.setText(QObject::tr("Hello world!"));

    hello.resize(200, 100);
    hello.show();
 }

结果是编译没有问题,运行没有出错,但是不显示了。请问是什么原因呢?

------解决方案--------------------
所以得用 new 啊,这是堆和栈的区别,所以建议你补习c++基础,还有qt本身的内存管理机制。这些基本的问题搞不清楚的话写出来的程序很容易崩溃的,因为这是c++不是java。
------解决方案--------------------
析构就是被删除了,这个控件只存在了一瞬间。楼主可以用这个代码看:
class Mybutton : public QPushButton
{
public:
~Mybutton(){
qDebug()<<"delete mybutton";
}
};
void helloworld();

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    helloworld();
    return a.exec();
}

void helloworld()
{
Mybutton button;
button.resize(100,100);
button.show();
}

执行你会发现,Mybutton立马被析构了,也就是被删除了。生命周期只在helloworld里
  相关解决方案