【问题标题】:QUiLoader only creates base classes of custom widgetsQUiLoader 只创建自定义小部件的基类
【发布时间】:2015-10-13 11:36:45
【问题描述】:

我正在尝试使用 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 的构造函数中也有一个断点,它永远不会被命中。

我做错了什么?

【问题讨论】:

  • 什么是GUILoader?你检查你的 .ui 文件了吗?
  • 只是一个错字。应该是 QUiLoader。
  • @SaZ,我的 .ui 文件是正确的。 &lt;widget class="CustomButton"&gt;
  • 对不起,我帮不上忙。如果您能提供 SSCCE,那就太好了

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-06-10
    • 1970-01-01
    • 2013-01-08
    • 2023-03-20
    • 2019-11-20
    • 2013-10-05
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多