C++ (Qt)namespace Ui { class Form: public Ui_Form {};} // namespace Ui
C++ (Qt)#include "ui_general.h" //Here. Just this header differ. class PrefWidget : public QWidget{ Q_OBJECT Ui::Form *ui;public: PrefWidget(QWidget *parent = 0) : QWidget(parent), ui(new Ui::Form) { ui->setupUi(this); } ~PrefWidget() { delete ui; }};
QWidget* ui;PrefWidget::PrefWidget( QWidget *parent , QString uiName){ QUiLoader loader; QFile file( uiName ); file.open(QFile::ReadOnly); ui = loader.load(&file, this); file.close();}
C++ (Qt)#ifndef QCUSTOMUILOADER_H#define QCUSTOMUILOADER_H #include <QWidget>#include <QString> class QUiLoader;class QFile; class QCustomUiLoader : public QWidget{ Q_OBJECT QUiLoader *loader; QWidget *lastLoaded; public: QCustomUiLoader(QWidget* parent = 0); ~QCustomUiLoader(); QWidget* Load(const QString& filename, QWidget* parent = 0); QWidget* LastLoaded() const { return lastLoaded; } signals: void modified(QObject*); public slots: void IndexChanged(int i) { emit modified( sender()->parent() ); } void StringChanged(QString) { emit modified( sender()->parent() ); } void EmptyChanged() { emit modified( sender()->parent() ); }}; #endif // QCUSTOMUILOADER_H
C++ (Qt)#include "QCustomUiLoader.h" #include <QFile>#include <QUiLoader> #include <QLineEdit>#include <QComboBox>#include <QAbstractButton> QCustomUiLoader::QCustomUiLoader(QWidget* parent) : QWidget(parent), loader(new QUiLoader(this)), lastLoaded(0){ } QCustomUiLoader::~QCustomUiLoader(){} QWidget* QCustomUiLoader::Load(const QString& filename, QWidget* parent){ // // Load UI // lastLoaded = 0; QFile file(filename, this); file.open(QFile::ReadOnly); if( !file.isOpen() ) return lastLoaded; lastLoaded = loader->load(&file, parent); file.close(); // // Connect UI signals // foreach(QObject* o, lastLoaded->children()) { QLineEdit *le = 0; QComboBox *cb = 0; QAbstractButton* ab = 0; if( le = qobject_cast<QLineEdit*>(o) ) { connect(le, SIGNAL(textChanged(QString)), SLOT(StringChanged(QString))); } else if( cb = qobject_cast<QComboBox*>(o) ) { connect(cb, SIGNAL(currentIndexChanged(int)), SLOT(IndexChanged(int))); connect(cb, SIGNAL(editTextChanged(QString)), SLOT(StringChanged(QString))); } else if( ab = qobject_cast<QAbstractButton*>(o) ) { connect(ab, SIGNAL(clicked()), SLOT(EmptyChanged())); } } // // Return result // return lastLoaded;}