如何在Qt 3中使用小部件插件?

洛朗·米歇尔(Laurent Michel)

由于某些原因,我必须在SLES 11 SP3下使用Qt3。我写了以下插件:

// PixmapButtonPlugin.hpp
#include <qwidgetplugin.h>

class PixmapButtonPlugin : public QWidgetPlugin
{
  public:
    QStringList keys () const;
    QWidget* create (const QString& key, QWidget* parent = 0, const char* name = 0);
    QString group (const QString& key) const;
    QIconSet iconSet (const QString& key) const;
    QString includeFile (const QString& key) const;
    QString toolTip (const QString& key) const;
    QString whatsThis (const QString& key) const;
    bool isContainer (const QString& key) const;
};
Q_EXPORT_PLUGIN(PixmapButtonPlugin)


// PixmapButtonPlugin.cpp
#include "PixmapButtonPlugin.hpp"
#include "PixmapButton.qh"

QStringList PixmapButtonPlugin::keys () const
{
  return QStringList() << "PixmapButton";
}

QWidget* PixmapButtonPlugin::create (const QString&, QWidget* parent, const char*)
{
  return new PixmapButton(parent);
}

QString PixmapButtonPlugin::group (const QString&) const
{
  return "Buttons";
}

QIconSet PixmapButtonPlugin::iconSet (const QString& key) const
{
  return QWidgetPlugin::iconSet(key);
}

QString PixmapButtonPlugin::includeFile (const QString&) const
{
  return "PixmapButton.qh";
}

QString PixmapButtonPlugin::toolTip (const QString&) const
{
  return "Pixmap button";
}

QString PixmapButtonPlugin::whatsThis (const QString&) const
{
  return "Button that takes the shape of its pixmap";
}

bool PixmapButtonPlugin::isContainer (const QString&) const
{
  return false;
}

我终于将已编译的共享库libplugins.so复制到了该文件夹中

/usr/lib/qt3/plugins/designer

设计器不会在任何地方显示插件,也不会告诉我它也无法创建相应的小部件。我绝对没有错误。

我应该怎么办?

洛朗·米歇尔(Laurent Michel)

我从一位高级开发人员那里得到了一些工作上的帮助,实际上找到了解决该问题的方法。这里的主要问题是确保插件正常。如何检查我的插件一切正常?那很简单。

首先,编译以下简单应用程序:

// PluginLoader.cpp
#include <iostream>
#include <qlibrary.h>
#include <private/qcom_p.h>

int main(int argc, char *argv[])
{
  QLibrary lib("/path-to-my-plugin/myPlugin.so");
  std::cout << "Load: " << lib.load() << std::endl;
  std::cout << "Resolve: " << (lib.resolve("ucm_instantiate") != 0) << std::endl;

  return 0;
}

其次,为库激活一些调试工具:在控制台中键入以下命令

export LD_WARN=1
export LD_VERBOSE=1
export LD_DEBUG=all

请注意,对于LD_DEBUG变量,除“ all”外还有许多其他选项。只需输入

export LD_DEBUG=help

获取更多详细信息(启动上述应用程序后,您将立即获取详细信息)。

然后,启动PluginLoader应用程序

./PluginLoader 2> loader.log

然后,文件loader.log将包含有关正在加载的库的所有详细信息,尤其是以

symbol lookup error

表示插件中缺少某些内容。

当PluginLoader满意时,即当它说

Load: 1
Resolve: 1

您通常可以在Qt Designer中使用该插件了。要使用它,请将其复制到文件夹中

/usr/lib/qt3/plugins/designer

或者

$QTDIR/plugins/designer

这是设计器插件的默认文件夹。通过设置

LD_LIBRARY_PATH
QT_PLUGIN_PATH

适当地。

通常,您也可以

ldd /path-to-your-plugin/myPlugin.so

这将向您显示此插件链接到的库。这可以为您提供有关您可能已经忘记的库的信息。

最后的评论。我正在使用SLES 11 SP3 64位进行开发。但是,我正在编译32位应用程序。特别是,该插件为32位。在尝试使插件出现在设计器中之前,请确保设计器为32位版本。否则,该插件将不会出现在列表中。

还请注意,此过程也可以应用于Qt4和Qt5插件的生产(可能以几种适应方式为模)!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Qt小部件中使用QStringView(或QStringRef)?

来自分类Dev

如何在小部件中使用条件?

来自分类Dev

如何在Python Qt应用程序中使用KDE Okular的文档视图小部件?

来自分类Dev

如何在python 3.4中使用Gtk3在背景图像上插入小部件?

来自分类Dev

如何在Qt Creator中锚定小部件?

来自分类Dev

如何在QML中嵌入Qt小部件?

来自分类Dev

如何在QML中访问Qt日历小部件

来自分类Dev

如何在Qt小部件中捕获Tab键

来自分类Dev

如何在Qt小部件中设置文本格式

来自分类Dev

如何在flutter中使用custom_navigation_bar插件导航到另一个小部件

来自分类Dev

如何在Flutter中使用小部件从文件中读取文本并将其显示为列表?

来自分类Dev

如何在没有 onClick 的主要活动中使用我的片段中定义的小部件

来自分类Dev

如何在ipython中使用按钮获取小部件值

来自分类Dev

如何在有状态的小部件中使用键?

来自分类Dev

如何在容器中使用if语句和Container小部件

来自分类Dev

如何在其他小部件中使用QSpinbox?

来自分类Dev

如何在Android的小部件中使用getSystemService?

来自分类Dev

如何在小部件的子级中使用“for”循环?

来自分类Dev

如何在Qt Creator中安装插件?

来自分类Dev

我如何在GTK 3中对齐小部件

来自分类Dev

如何在Qt小部件中格式化文本

来自分类Dev

如何在tkinter中使3列网格中显示的两个小部件之间的间距相等?

来自分类Dev

使用函数时如何在tikinter中销毁小部件

来自分类Dev

如何在未选中的选项卡中的QTabWidget中绘制Qt小部件?

来自分类Dev

在Qt Designer中使用PySide自定义小部件

来自分类Dev

在QT中使用箭头在小部件之间导航

来自分类Dev

在QT中使用箭头在小部件之间导航

来自分类Dev

如何在另一个功能中使用在QDateEdit小部件中设置的用户值?

来自分类Dev

如何在tkinter的顶级小部件中输入值并在主窗口中使用它来显示?

Related 相关文章

  1. 1

    如何在Qt小部件中使用QStringView(或QStringRef)?

  2. 2

    如何在小部件中使用条件?

  3. 3

    如何在Python Qt应用程序中使用KDE Okular的文档视图小部件?

  4. 4

    如何在python 3.4中使用Gtk3在背景图像上插入小部件?

  5. 5

    如何在Qt Creator中锚定小部件?

  6. 6

    如何在QML中嵌入Qt小部件?

  7. 7

    如何在QML中访问Qt日历小部件

  8. 8

    如何在Qt小部件中捕获Tab键

  9. 9

    如何在Qt小部件中设置文本格式

  10. 10

    如何在flutter中使用custom_navigation_bar插件导航到另一个小部件

  11. 11

    如何在Flutter中使用小部件从文件中读取文本并将其显示为列表?

  12. 12

    如何在没有 onClick 的主要活动中使用我的片段中定义的小部件

  13. 13

    如何在ipython中使用按钮获取小部件值

  14. 14

    如何在有状态的小部件中使用键?

  15. 15

    如何在容器中使用if语句和Container小部件

  16. 16

    如何在其他小部件中使用QSpinbox?

  17. 17

    如何在Android的小部件中使用getSystemService?

  18. 18

    如何在小部件的子级中使用“for”循环?

  19. 19

    如何在Qt Creator中安装插件?

  20. 20

    我如何在GTK 3中对齐小部件

  21. 21

    如何在Qt小部件中格式化文本

  22. 22

    如何在tkinter中使3列网格中显示的两个小部件之间的间距相等?

  23. 23

    使用函数时如何在tikinter中销毁小部件

  24. 24

    如何在未选中的选项卡中的QTabWidget中绘制Qt小部件?

  25. 25

    在Qt Designer中使用PySide自定义小部件

  26. 26

    在QT中使用箭头在小部件之间导航

  27. 27

    在QT中使用箭头在小部件之间导航

  28. 28

    如何在另一个功能中使用在QDateEdit小部件中设置的用户值?

  29. 29

    如何在tkinter的顶级小部件中输入值并在主窗口中使用它来显示?

热门标签

归档