让我们假设我想创建一个周围有模糊阴影的小部件,我想这样做:
objB
添加到A类的对象objA
中(将其添加到其布局中)。两个表单都是在ui
- 文件中创建的。 objB
的功能,例如已在classB.cpp
和classB.h
中实施。
现在我想知道:
通常,如果我想在构造函数之后保持objB
活着,我会添加一个指向我的主类列表的指针。但现在,我是否必须保存objB
或objA
的指针?我现在如何访问此小部件的成员?他们现在是objA
的成员吗?
我的objB
类型QMainWindow
还是QWidget
是否会有所不同?
答案 0 :(得分:0)
Qt使用它的对象树来管理大部分内容。
http://qt-project.org/doc/qt-5/objecttrees.html
基本上,您只需将任何内容与其父级相关联,您就不需要将其作为成员变量。如果你看一下这些例子,其中有一些只有一个main.cpp,甚至没有一个单独的类来跟踪什么属于什么。
编辑:几乎任何放在对象树上的GUI元素都应该是一个指针,并在堆上用new
进行初始化。如果你不那样做,那么当事情超出范围时,你可能会遇到问题。
如果您命名对象并使用QObject::findChild<T>(QString name);
函数,您甚至可以在对象树上找到元素。
http://qt-project.org/doc/qt-5/qobject.html#findChild
QMainWindow
和QWidget
之间的主要区别在于QMainWindow
附带了菜单栏,工具栏,停靠栏以及为您设置的中央窗口小部件指针。
如果您不使用任何菜单栏,工具栏,停靠栏等,QMainWindow
与QWidget
相比的功能和外观几乎完全相同。
唯一的区别是如何开始向窗口小部件的中间添加元素。使用QMainWindow
,您可以将任何类型的QWidget
设置为中央窗口小部件,然后从那里开始。对于QWidget
,通常我会在其中设置一个布局,然后在布局中挂起东西,但你也可以开始为它添加内容。
也像Pavel Strakhov所说,QMainWindow
必须在对象树上没有父母。
同样一般来说,我发现在不使用Qt Designer和ui代的情况下管理和处理大型项目更容易。大多数示例也不使用生成的ui
内容。
另一方面,开始使用QML和QtQuick进行GUI的工作也很大,但QWidget功能不会很快消失。
希望有所帮助。