QUiLoader仅创建自定义小部件的基类

时间:2015-10-13 11:36:46

标签: c++ qt widget custom-controls qtgui

我正在尝试使用 QUiLoader 加载包含自定义小部件的ui文件。

我的自定义小部件(称为 CustomButton )继承自 QPushButton 。 ui文件已加载并放入我的主布局中,但所有CustomButtons仅为QPushButtons。看来,QUiLoader创建了我的所有自定义小部件作为其基类的实例。

这就是我的所作所为:

QUILoader loader;
loader.addPluginPath(MY_PLUGIN_PATH);

QStringList availableWidgets = loader.availableWidgets();

//fail if "CustomButton" is not available
if (!availableWidgets.contains("CustomButton")) {
  return false;
}
//here I see that availableWidgets contain my "CustomButton"!

QString qFileName(MY_UI_FILE_PATH); 
QFile file(qFileName);
file.open(QFile::ReadOnly);

//"mainFrame" is a QFrame in my main ui
QWidget *customWidget = loader.load(&file, mainframe);
file.close();

//layout
mainframe->layout()->addWidget(customWidget);

//Note: There are no QPushButtons in my ui file! There are only CustomButtons!

//Now I try to find my custom buttons
QList<QPushButton*> list1 = customWidget->findChildren<QPushButton *>();     //all my CustomButtons are listed here
QList<CustomButton*> list2 = customWidget->findChildren<CustomButton *>();   //this list is empty

//我的CustomButton构造函数中也有一个断点,它永远不会被击中。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我发现,QUiLoader实际上创建了我的CustomButtons!

只有findChildren()方法似乎是错误的,因为它找不到我的CustomButtons而是QPushButtons。