Qt Designer使用Custom Widget插件定义未定义的符号

时间:2011-10-04 06:55:55

标签: c++ qt4 qt-designer

我在Fedora 14下使用Qt 4.7.2。

我有一个自定义小部件的工作库,我试图将其集成到Qt Designer中。 有一个简单的小部件基类,然后是一些从它继承的更复杂的小部件。 简单的小部件集成很好,但我对更复杂的小部件有问题。

问题来自这样一个事实:更复杂的问题需要在创建时将特殊结构传递给它们。所以我在插件中创建复杂小部件的代码是:

QWidget *myPlugin::createWidget(QWidget *parent)
{
    my_struct *xyz = new my_struct;
    return new myWidget("MyWidget",xyz, parent);
}

my_struct只是一个带有整数,双精度和数组的简单C风格结构。

然后,当我使用此插件启动Qt Designer时,我得到:

/usr/lib64/qt4/bin/designer: symbol lookup error: /usr/lib64/qt4/plugins/designer/libMyPlugin.so: undefined symbol: _ZN8MyWidgetC1E7QStringP17my_structP7QWidget

我正在构建该插件的发布版本,而不是调试版本。

我也尝试将xyz定义为插件中的静态类变量,并将其地址传递给构造函数,但我仍然得到同样的错误。

我还尝试将xyx作为未使用的静态类变量添加到我的简单小部件中,并且没有给出错误,因此错误似乎来自对myWidget构造函数的调用。

任何人都可以帮我解决这个问题吗?


谢谢Arne,

你是对的。

我将我的库明确添加到插件的.pro文件中,然后就可以了。

让我感到困惑的是,如果没有库,我怎么能构建没有错误的插件? 为什么我的简单小部件在没有库的情况下工作?

1 个答案:

答案 0 :(得分:1)

错误消息看起来好像链接器没有找到构造函数myWidget(QString, my_struct*, QWidget*)的定义。您是否已将相关源文件添加到发布版本中?你真的有这个构造函数的定义吗?您还可以交换目标文件链接顺序。我在过去看过大型项目,所以我不会太惊讶。包含定义的目标文件需要在使用定义的文件之前说明。