繁体   English   中英

Qt-help creating Qt Designer custom widget plugin like QTabWidget 插件

[英]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 中的连接:

当应用程序不在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM