[英]Qt-help creating Qt Designer custom widget plugin like QTabWidget
我创建了一个 Qt Designer 自定义小部件插件,其中包含一个QListView
和一个QStackedWidget
。 当我在 Qt 创建器中安装插件时,我无法通过单击访问QListView
的项目,即使我将单击信号与插槽连接也是如此。 我的问题是,我需要插槽在 Qt Designer 中执行,因为我希望小部件的行为就像QTabWidget
一样,但是在选项卡中,我想使用列表在页面之间导航。 但在我的情况下,当我点击其中一个项目时,整个小部件都会获得点击,而不仅仅是列表中的项目,所以我不想知道是否有可能实现这一点。 我希望我能很好地解释我的观点,谢谢。
自定义widget class的构造函数:
MultiPageWidget::MultiPageWidget(QWidget *parent)
: QWidget(parent)
, stackWidget(new QStackedWidget)
, listView (new QListView)
, listModel (new ListModel)
{
listView->setObjectName(QStringLiteral("__qt__passive_listView"));
listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
listView->setModel(listModel);
connect(listView, SIGNAL(clicked(QModelIndex)), this, SLOT(setCurrentIndex(QModelIndex)));
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(listView,1);
layout->addWidget(stackWidget,2);
//listView->setFocus();
}
domXml() 方法 int 插件的 class:
QString MultiPageWidgetPlugin::domXml() const
{
return QLatin1String("
<ui language="c++">
<widget class="MultiPageWidget" name="multipagewidget">
<widget class="QWidget" name="page" />
</widget>
<customwidgets>
<customwidget>
<class>MultiPageWidget</class>
<extends>QWidget</extends>
<addpagemethod>addPage</addpagemethod>
</customwidget>
</customwidgets>
</ui>"
);
}
请注意,我想先将其添加为评论,因为它不是一个完整的答案,但我的声誉太低了。
当应用程序不在 Qt Designer 中运行时,将发出 clicked() 信号。 我认为这里缺少的是 QListView 的 QAbstractItemView::currentChanged 信号与 MultiPageWidgetPlugin 的 currentIndexChanged 插槽的连接。 例如,在 Qt 文档 ( https://doc.qt.io/qt-5/qtdesigner-containerextension-example.html ) 中显示了这一点:
QWidget *MultiPageWidgetPlugin::createWidget(QWidget *parent)
{
MultiPageWidget *widget = new MultiPageWidget(parent);
connect(widget, &MultiPageWidget::currentIndexChanged,
this, &MultiPageWidgetPlugin::currentIndexChanged);
return widget;
}
因此,您需要在 MultiPageWidget class 中发出一个信号,您可以将其命名为 currentIndexChanged,例如 Qt 文档中的那样。 当您的 ListView 的 currentIndex 更改时必须发出此信号,因此正如我上面建议的那样,我将使用 QAbstractItemView::currentChanged 信号。 您还必须找到 QAbstractItemView::currentChanged 信号中发出的 QModelIndex 参数与 MultiPageWidgetPlugin 的 currentIndexChanged 信号中的 integer 参数之间的转换。
我希望这可以帮到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.