Qt具有与小部件分开的布局系统类型,这会导致我出现问题。我知道,当我有一个了QSplitter,我可以做Qt小部件在彼此之上堆叠子布局
new SomeCustomQWidget(splitter);
但是添加的东西给它,如果我有一个QWidget,我不应该能够做同样的事情? Qt网页仅解释如何将layoutItems添加到布局,只通过继承两个子类来将它们连接到小部件。所以,正确的无我做这样的事情
item = new QWidget(parentsplitter); //this works
subitem = new customWidget(item); //this too
subitem2 = new QSlider(item); //this isn't laid out with subitem
然而,这导致滑动器的子项的顶部,而不是被旁边(右侧或低于我期望)。调用
//either
new QVBoxLayout(item);
//or
item->setLayout(new QVBoxLayout());
//or
item->setLayout(new QVBoxLayout(item));
在初始化项目后没有帮助。 (我的逻辑是该项目将布局作为子项目并将添加后续子项)。
我早些时候解决了这个问题,但现在我在QGraphicsView中制作一个小部件时面临完全相同的问题。我觉得应该不需要为我想要动态添加到这些小部件的每个项目创建一个自定义子类,就像Qt网站所期望的那样。 (如果我只是想添加一些文本和几个按钮,我真的需要制作2个自定义子类吗?)我使用.ui文件进行基本布局,但这些项目需要动态创建。
解决方案
忘了打电话给item->show();
在用于布局的部件。
原来,我测试过其他正确的代码,但由于我的一些子类调用了show(),但其他一些子类却没有,所以这只是对我而言是打破了。
但这不是graphicswidgets的问题,因为graphicslayout只能用于添加graphicslayoutite,它不包括例如graphicstextitems。
解决方案2 使用QGraphicsProxyWidget代替QGraphicsWidget固定的问题!