QUiLoader создает только базовые классы пользовательских виджетов

Я пытаюсь загрузить пользовательский интерфейс, содержащий пользовательские виджеты, используя QUiLoader.

Мои пользовательские виджеты (называемые CustomButton) наследовать от QPushButton. Файл пользовательского интерфейса загружается и помещается в мой основной макет, но все пользовательские кнопки — только 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

Решение

Я узнал, что QUiLoader фактически создает мои CustomButtons!

Только метод findChildren () кажется неправильным, поскольку он не находит мои CustomButtons, но QPushButtons.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]