请问大家,我写了一个简单的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里