Динамическая смена ui файлов в Qt

181
20 марта 2019, 20:50

Изучаю Qt, наткнулся на такую проблему. Мне требуется быстро менять ui файлы по ходу выполнения программы. В python это реализовано так:

uic.loadUi("filename.ui")

В документации я откопал QUiLoader, но не совсем понимаю, как с ним работать. У меня имеется абсолютно стандартная программа, основанная на QMainWindow (которую создает Qt Creator изначально). Дело в том, что большинство примеров идет на QWidget и мне не понятно, как переделать их под QMainWindow.

Answer 1

Вот пример из моей программки (ui файл в данном случае в ресурсах):

QUiLoader loader;
QFile file(":/Dialogs/QcMoreDlg.ui");
file.open(QFile::ReadOnly);
moreDlg = static_cast<QDialog *>(loader.load(&file, this));
file.close();
moreDlg->findChild<QLineEdit *>("excellent")->setText(QString().number(waste_block.excellent, 'f', 2));
moreDlg->findChild<QLineEdit *>("good"     )->setText(QString().number(waste_block.good,      'f', 2));
moreDlg->findChild<QLineEdit *>("waste"    )->setText(QString().number(waste_block.waste,     'f', 2));
if(!waste_block.plotCurves)
    moreDlg->findChild<QRadioButton *>("allButton")->setChecked(true);
else
    moreDlg->findChild<QRadioButton *>("signButton")->setChecked(true);
Answer 2

Видимо, вам нужно сделать вот это:

void MainWindow::centralWidgetFromUi(QString path)
{
    // Окрываем файл *.UI для чтения
    QFile f(path); 
    f.open(QFile::ReadOnly);
    // грузим виджет из UI
    QWidget* newWidget = loader.load( f, this ); 
    // Удаление старого центрального виджета
    delete centralWidget(); 
    // Устанавлиаем новый виджет в качестве центрально
    setCentralWidget( newWidget ); 
}
READ ALSO
Скалярное произведение чисел (С++)

Скалярное произведение чисел (С++)

Есть код скалярного произведения:

145
Как решить задачу &ldquo;обратного&rdquo; рюкзака в c++?

Как решить задачу “обратного” рюкзака в c++?

Ввод данных точно также как в рюкзаке, только суммарный вес должен быть таким, что при добавлении любого другого объекта в оптимальное множество,...

161
Рекурсивная печать файлов проекта

Рекурсивная печать файлов проекта

Как в c++ рекурсивно напечатать названия всех файлов в директории, переданной параметром программе? Например, для следующей структуры

122
Практическое применение std::atexit

Практическое применение std::atexit

Сегодня я узнал о существовании функции atexitЧитая мануалы б ней, не могу понять, насколько практически необходимо использовать эту функцию,...

169