C++ 使用Qt Designer表单类扩展我自己的自定义小部件时防止重复的自动连接
我有一个定制的容器小部件(我们称之为WidgetA),它由一些小部件组成,还有一个容器,它使用。然后我有另一个小部件(WidgetB),它扩展了WidgetA,在WidgetA的容器中添加了许多小部件。这两个小部件都有一个与之关联的.ui表单文件 这个配置对我来说很好,只有一个例外。Qt的函数在这两个类的setupUI函数中运行,导致小部件A的小部件连接到它们的插槽两次。我的代码如下所示:C++ 使用Qt Designer表单类扩展我自己的自定义小部件时防止重复的自动连接,c++,qt,C++,Qt,我有一个定制的容器小部件(我们称之为WidgetA),它由一些小部件组成,还有一个容器,它使用。然后我有另一个小部件(WidgetB),它扩展了WidgetA,在WidgetA的容器中添加了许多小部件。这两个小部件都有一个与之关联的.ui表单文件 这个配置对我来说很好,只有一个例外。Qt的函数在这两个类的setupUI函数中运行,导致小部件A的小部件连接到它们的插槽两次。我的代码如下所示: // WidgetA.h namespace Ui { class WidgetA; } cla
// 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;
}
//WidgetA.h
名称空间用户界面{
WidgetA类;
}
WidgetA类:公共QWidget
{
Q_对象
公众:
显式WidgetA(QWidget*parent=0):
QWidget(母公司),
ui(新ui::WidgetA)
{
ui->setupUi(这个);//答案很简单:
不要使用connectSignalsByName功能,不要创建像on_object_signal()这样的方法,这只会给任何软件带来麻烦
如果讨论中的小部件应该通过其UI连接,则可以使用Qt Designer拖放信号连接器,但根据我个人处理用Qt编写的庞大代码库的经验,您不应该使用它,而应该手动使用connect()函数,因为它不太容易出错。答案很简单:
不要使用connectSignalsByName功能,不要创建像on_object_signal()这样的方法,这只会给任何软件带来麻烦
如果讨论中的小部件应该通过其UI连接,那么可以使用Qt Designer拖放信号连接器,但根据我个人处理用Qt编写的庞大代码库的经验,您不应该使用它,而应该手动使用connect()函数,因为它不太容易出错