Q&A-1:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Q&A-1:相关的知识,希望对你有一定的参考价值。
Q:
QMenu *file = menuBar()->addMenu(tr(“&File”));
file->addAction(openAction);
QToolBar *toolBar = addToolBar(tr(“&File”));
toolBar->addAction(openAction);
file和toolBar这两个变量是在构造函数内部被定义和赋值的,那岂不是出了构造函数,他们就应该被销毁?
A:
这里并不能得出这个结论。注意,如果不看源代码,你不能推断出,addMenu() 和 addToolBar() 这两个函数是如何实现的:是在堆上,还是在栈上分配内存空间,你所知道的仅仅是这两个函数返回了一个指针。如果是在栈上,它们必定会在超出作用域被销毁;如果是堆上则不会。(当然,从你所举的例子看,肯定是在堆上分配空间的,否则就像你所说的,一旦出了构造函数就会被销毁)
————————————————————————————————————————————————————————————————————
Q:
“在堆上创建了openAction对象”,这个“堆”应该是与“栈”对应的,请问该如何理解?
A:
使用 new 关键字创建的对象,都是在堆上面分配空间;否则都是在栈上面分配的
Tips:
使用 qrc 与不使用 qrc 是完全不同的:前者会编译成二进制代码,直接内嵌到 exe 中;后者会在运行时加载图片。二者适用于不同的场合:前者运行效率更高,但是不能由用户提供并切换;后者可以由用户提供图片并切换显示,适合于用户自定义主题等。
QMenu *file = menuBar()->addMenu(tr(“&a”)); 等价于 QMenuBar *mb = menuBar();mb->addMenu(tr("&a"));
转自:https://www.devbean.net/2012/08/qt-study-road-2-action/
以上是关于Q&A-1:的主要内容,如果未能解决你的问题,请参考以下文章