【发布时间】:2013-08-13 11:27:05
【问题描述】:
我想做一些相当简单的事情:向 Qt 设计器添加一个自定义小部件,它基本上是一个包含自定义垂直布局的滚动区域(我向垂直布局添加了一些代码,以便为我的项目处理其对象)。 这个想法是代表一个垂直菜单,将在我的屏幕一侧
到目前为止我做了什么
我创建了自定义小部件插件和自定义布局。
我的自定义小部件代码如下所示:
#include "menuwidget.h"
MenuWidget::MenuWidget(QWidget *parent) :
QScrollArea(parent)
{
this->setWidgetResizable(true);
QWidget* layoutHoldingWidget= new QWidget(this);
layout= new MenuLayout();
layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
layout->addStretch(1);
layoutHoldingWidget->setLayout(layout);
this->setWidget(layoutHoldingWidget);
}
如果我手动添加到布局中(在构造函数代码中)一些按钮
for(int i =0;i<20;i++)
layout->addWidget(new QPushButton(this));
它确实有效,我可以看到我的滚动区域包含一些按钮,这几乎是我想要的。
我想要什么
我希望能够直接通过 Qt 设计器添加这些按钮:用户首先将空的 MenuWidget 拖到主窗口上,然后将 QPushButtons 拖到我的自定义小部件上,就像他在常规垂直布局上所做的那样。
这可能吗?我怎么能这样做?
谢谢! :)
编辑 1
我缺少的是在拖放 QScrollArea 时始终创建的“scrollAreaWidgetContents”小部件。我做了类似的事情,在其 domXml 函数中将一个小部件(我们称之为 containerWidget)添加到我的自定义 scrollArea 中,这使我能够像我想做的那样将小部件拖放到我的滚动区域上。
但是我仍然无法弄清楚:我希望 containerWidget 有一个 customLayout (myCustomLayout) 。如果我在 domXml 函数中添加它,我会在终端中得到以下行:
Designer:不支持布局类型“MyCustomLayout”, 默认为网格。
所以这意味着我不能告诉设计师使用我的自定义布局来放置我的小部件,这有点可悲:D
这里有什么办法可以“作弊”吗?
【问题讨论】:
-
阅读 QtDesigner 中的自定义小部件qt-project.org/doc/qt-4.8/designer-using-custom-widgets.html
-
我已经阅读过这方面的内容,但我不明白它对我有什么帮助。我认为我的问题非常具体。
-
给定的链接和链接的文档解释了如何使用自己的小部件和小部件插件扩展 qt 设计器
-
谢谢,但我已经无数次阅读这个文档了。我需要一些关于这个特定问题的帮助...
-
我将给定的选项用于子类小部件,并使用 qt-project.org/doc/qt-4.8/designer-creating-custom-widgets.html 或 qt-project.org/doc/qt-4.8/qtdesigner.html 指南为 QtDesigner 创建插件。所有步骤都应在其中提及。根据您的描述,您还没有创建一个完整的插件,只是一个替代品。您的下一步将是重新实现指南中提到的给定虚拟功能。据我所知,那里几乎涵盖了所有内容,因此最终请再次阅读这些链接。
标签: qt qt4 qwidget qt-designer