• 2932阅读
  • 0回复

[提问]Qt官方范例中,使用QUiLoader加载UI文件,结合插件的问题。 [复制链接]

上一主题 下一主题
离线caiwei_cs
 

只看楼主 倒序阅读 楼主  发表于: 2017-08-04
官方范例1:Calculator Builder Example 中有如下代码:
  1. QUiLoader loader;
  2.     QFile file(":/forms/calculatorform.ui");
  3.     file.open(QFile::ReadOnly);
  4.     QWidget *formWidget = loader.load(&file, this);
  5.     file.close();
  6.     ui_inputSpinBox1 = findChild<QSpinBox*>("inputSpinBox1");
  7.     ui_inputSpinBox2 = findChild<QSpinBox*>("inputSpinBox2");
  8.     ui_outputWidget = findChild<QLabel*>("outputWidget");

实现了,动态加载UI文件,并且通过findChild查找到UI文件中的控件,能够对控件做进一步的操作。

官方范例2:World Time Clock Builder Example 中也用QUiLoader加载UI文件,并且文件中包含插件生成的控件,WorldTimeClock(插件在官方范例 World Time Clock Plugin Example中生成)。我希望像第一个范例一样,能够查找并使用UI文件中的控件。

  1. QFile file(":/forms/form.ui");
  2.     file.open(QFile::ReadOnly);
  3.     QWidget *widget = loader.load(&file);
  4. //自己加入—begin
  5. //qt自带控件可以
  6.     QLabel_currentTime = widget->findChild<QLabel*>("label");
  7.     qDebug()<<ui_label_currentTime->text();
  8.     ui_label_currentTime->setText("lala");
  9.     //插件加入的控件,报错
  10.     WorldTimeClock * ui_clock;
  11.     ui_clock = widget->findChild<WorldTimeClock*>("worldTimeClock");
  12.     qDebug()<<ui_clock->metaObject()->className();
  13.     ui_clock->setTimeZone(2);
  14. //自己加入-end
  15.     file.close();
  16.     widget->show();
范例位置:$$[QT_INSTALL_EXAMPLES]/designer/worldtimeclockbuilder
报错:
D:\Qt\Qt5.5.1\Examples\Qt-5.5\designer\worldtimeclockbuilder\main.cpp:77: error: undefined reference to `_imp___ZN14WorldTimeClock11setTimeZoneEi'

虽然我将生成插件的工程中的头文件应用过来,或者拷贝过来还是不行。
//#include "../../../../Examples/Qt-5.5/designer/worldtimeclockplugin/worldtimeclock.h"
#include "worldtimeclock.h"

我想问的是
如何实现对UI文件中插件控件,例如上面的worldtimeclock,也能像自带控件一样修改被引用使用。否则觉得灵活性太差,用插件没什么意义。

另外:用插件生成的控件,只能在QDesigner中使用,在QtCreator中不行?好像在哪里看到,Qt原版用vs编译的,所以mingw下QDesignerCustomWidgetInterface插件是不能在Qtcreator中用?

快速回复
限100 字节
 
上一个 下一个