我在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文件中,然后就可以了。
让我感到困惑的是,如果没有库,我怎么能构建没有错误的插件? 为什么我的简单小部件在没有库的情况下工作?
答案 0 :(得分:1)
错误消息看起来好像链接器没有找到构造函数myWidget(QString, my_struct*, QWidget*)
的定义。您是否已将相关源文件添加到发布版本中?你真的有这个构造函数的定义吗?您还可以交换目标文件链接顺序。我在过去看过大型项目,所以我不会太惊讶。包含定义的目标文件需要在使用定义的文件之前说明。