官方范例1:Calculator Builder Example 中有如下代码:
- QUiLoader loader;
-
- QFile file(":/forms/calculatorform.ui");
- file.open(QFile::ReadOnly);
- QWidget *formWidget = loader.load(&file, this);
- file.close();
-
- ui_inputSpinBox1 = findChild<QSpinBox*>("inputSpinBox1");
- ui_inputSpinBox2 = findChild<QSpinBox*>("inputSpinBox2");
- ui_outputWidget = findChild<QLabel*>("outputWidget");
实现了,动态加载UI文件,并且通过findChild查找到UI文件中的控件,能够对控件做进一步的操作。
官方范例2:World Time Clock Builder Example 中也用QUiLoader加载UI文件,并且
文件中包含
插件生成的控件,WorldTimeClock(插件在官方范例 World Time Clock Plugin Example中生成)。我希望像第一个范例一样,能够查找并使用UI文件中的控件。
- QFile file(":/forms/form.ui");
- file.open(QFile::ReadOnly);
- QWidget *widget = loader.load(&file);
- //自己加入—begin
- //qt自带控件可以
- QLabel_currentTime = widget->findChild<QLabel*>("label");
- qDebug()<<ui_label_currentTime->text();
- ui_label_currentTime->setText("lala");
- //插件加入的控件,报错
- WorldTimeClock * ui_clock;
- ui_clock = widget->findChild<WorldTimeClock*>("worldTimeClock");
- qDebug()<<ui_clock->metaObject()->className();
- ui_clock->setTimeZone(2);
- //自己加入-end
- file.close();
- 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中用?