gpt4 book ai didi

c++ - 使用 Qt Designer Form Classes 扩展我自己的自定义小部件时防止重复自动连接

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:52 24 4
gpt4 key购买 nike

我有一个自定义容器小部件(我们称之为 WidgetA),它由一些小部件组成,还有一个使用 QDesignerContainerExtension 向 Qt Designer 公开的容器。 .然后我有另一个扩展 WidgetA 的小部件 (WidgetB),将许多小部件添加到 WidgetA 中的容器。这两个小部件都有一个与之关联的 .ui 表单文件。

除了一个异常(exception),此配置非常适合我的目的。 Qt 的 connectSlotsByName在两个类的 setupUI 函数中运行的函数导致小部件 A 的小部件两次连接到它们的插槽。我的代码看起来像这样:

// WidgetA.h
namespace Ui {
class WidgetA;
}

class WidgetA : public QWidget
{
Q_OBJECT

public:
explicit WidgetA( QWidget* parent = 0 ) :
QWidget( parent ),
ui( new Ui::WidgetA )
{
ui->setupUi( this ); // <-- Connects widgets in WidgetA.
}

// ...

private:
Ui::WidgetA* ui;
}

// ...
// WidgetB.h
namespace Ui {
class WidgetB;
}

class WidgetB : public WidgetA
{
Q_OBJECT

public:
explicit WidgetB( QWidget* parent = 0 ) :
WidgetA( parent ), // <-- WidgetA’s constructor, calls setupUi resulting in WidgetA’s widgets being connected.
ui( new Ui::WidgetB )
{
ui->setupUi( this ); // <-- Connects widgets in WidgetA and WidgetB, resulting in duplicate connection of WidgetA’s widgets.
}

// ...

private:
ui::WidgetB* ui;
}

我知道 Qt::UniqueConnection 标志,但是因为 ui 的头类是自动生成的,所以我无法控制连接的性质。如何避免这种双重联系?

最佳答案

答案很简单:

不要使用connectSignalsByName特性,不要创建on_object_signal()之类的方法,这在任何软件中都是自找麻烦。

如果有问题的小部件应该通过它的 UI 连接,您可以使用 Qt Designer 拖放信号连接器,但根据我处理用 Qt 编写的庞大代码库的个人经验,您不应该使用它,而应该使用连接器() 手动运行,因为它不太容易出错。

关于c++ - 使用 Qt Designer Form Classes 扩展我自己的自定义小部件时防止重复自动连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44655039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com