2015-10-13 4 views
1

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

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

Что я делаю неправильно?

+0

Что такое 'GUILoader'? Вы проверили свой файл .ui? –

+0

Просто опечатка. Это должен быть QUiLoader. – courtjester199

+0

@SaZ, мой .ui файл правильный. '' – courtjester199

ответ

0

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

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