Qt5 C ++ Link New Window с Qt Designer - PullRequest
       1

Qt5 C ++ Link New Window с Qt Designer

0 голосов
/ 11 сентября 2018

Я пытался понять это последние 3 часа. Честно говоря, я не решался задать этот вопрос, но кажется, что на мою конкретную вещь никто не ответит. Итак, вот моя ситуация:

TL; DR: Как связать вновь созданные окна (либо в коде, либо в Qt Designer) с соответствующей частью. Значит, как связать сгенерированное кодом окно и Qt Designer и наоборот?


Сейчас я работаю над оконным приложением с Qt5 в Visual Studio 2017 .

Я хочу, чтобы новое окно открывалось, когда я нажимал на кнопку, а затем редактировал его с помощью Qt Designer, как я делаю с главным окном. (Имейте в виду, я использую Visual Studio 2017 в основном для программирования.)

Я смог сделать именно это. Но у меня нет никакого способа и идеи о том, как получить доступ к «классу» и всему окну с помощью Qt Designer. Я подумал, что мне нужен файл * .ui для подачи его в Qt Designer, но я понятия не имею, как его создать. Кроме того, я прочитал всю документацию, но не понял, как применить полученные знания.

Итак, мой код для открытия нового окна выглядит так:

mainprog.h:

class Program: public QMainWindow
{
    Q_OBJECT

public:
    Program(QWidget *parent = Q_NULLPTR);

private:
    Ui::ProgramClass ui;
    Ui::ProgramClass * uip = &ui;

private slots:

    void on_pushbutton_settings_released();

};

mainprog.cpp:

Program::Program(QWidget *parent)
            : QMainWindow(parent)
{
ui.setupUi(this);

connect(uip->pushButton_settings, SIGNAL(released()), this, SLOT(on_pushbutton_settings_released()));

}

//-----------------------------------------------
// Related function

void Program::on_pushbutton_settings_released()
{
qDebug() << "on_pushbutton_settings_released";  

QWindow *settings_window = new QWindow();
settings_window->show();

}

Так вот как я могу создать и отобразить новое окно (здесь: settings_window). Но как "получить доступ" к его классу и его методам и отредактировать его в Qt Designer? Если бы я был в Qt Creator, проблем не было бы (или, по крайней мере, меньше), потому что существует множество руководств, и Qt Creator автоматически создает все необходимые файлы. Но я работаю в Visual Studio 2017 и поэтому не могу использовать все утилиты Qt Designer / Creator / и т. Д.

Я думал, что смогу создать определенные заголовочные и * .cpp- файлы. Но опять же, что я должен положить туда, чтобы сделать все? Я обнаружил, что всегда есть файл " ui_Program.h " и что он создается путем чтения файла * .ui. Но все же, даже если я создал такие вещи, как заставить их читать все?

Или, возможно, я бы спросил наоборот: Как использовать / связать вновь созданное окно в Qt Designer в моем собственном коде в Qt5 C ++ со всеми связанными классами, заголовками и т. Д .?


Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

поэтому для любого, кто пытается решить ту же проблему, которую я описал в своем вопросе, я нашел ответ.

  1. Вам необходимо установить Qt Creator, но обычно его следует устанавливать, если у вас есть Qt Designer и вы его используете.

  2. Создайте новый проект в Qt Creator, назовите его как хотите.

  3. Сделайте это, как если бы вы кодировали в Qt Creator, то есть перейдите к имени файла вашего проекта, щелкните правой кнопкой мыши и "Добавить новый ...". (Projectname.pro -> Щелкните правой кнопкой мыши -> Добавить новый ... -> Qt -> Qt Designer-Formular-Class (или как там его называют на английском языке))

  4. Назовите его так, как вы хотите, чтобы оно было в вашем VS-проекте.

  5. Сохраните все, закройте Qt Creator.

  6. Перейдите в папку, в которой вы сохранили файл * .pro (файл проекта Qt Creator), и выберите файлы, связанные с классом.

    • classname.h
    • classname.cpp
    • classname.ui
  7. Скопируйте эти файлы в папку вашего проекта против

  8. Перетаскивайте или интегрируйте их в ваш vs-проект, как вы обычно делаете с «обычными» дополнительными файлами.

  9. Исправьте все #include и все, что нужно.

  10. Не знаю, нужно ли это, но откройте файл * .ui с помощью Qt Designer в браузере вашего проекта по сравнению с

Теперь вы можете использовать следующий код для реализации нового окна (QWidget) в вашем проекте:

classname new_widget; // creating new widget
new_widget.setModal(true); // isn't necessary, more info in the video (link) I post below
set_wind.exec(); // execute new widget (or whatever)

Возможно, это не самый профессиональный способ, но я решил, что это сработает для меня. Это утомительный процесс с несколькими окнами, подумал.

0 голосов
/ 11 сентября 2018

Похоже, что самое простое решение - использовать Расширение Qt VS Tool . Инструмент должен обрабатывать создание виджетов на основе .ui и пользовательских шагов сборки (я сам не использовал его, надеюсь, будет работать из коробки :).

Существуют и другие альтернативы, такие как использование сторонней системы сборки с поддержкой Qt (например, CMake или Meson) или настройка шагов предварительной сборки вручную, но это более широкая тема.


Я думаю, что вы предпочтете вышеупомянутый подход, но я также постараюсь ответить на ваши вопросы напрямую.

Я подумал, что мне нужен файл * .ui для подачи его в Qt Designer, но я понятия не имею, как его создать.

Просто откройте Qt Designer и используйте диалоговое окно «Новая форма» (или нажмите «Файл> Создать», чтобы открыть его) и сохраните файл.

.ui - это файлы XML. Чтобы сгенерировать код, вам нужно использовать инструмент Qt uic (расшифровывается как UI Compiler), чтобы сгенерировать файл ui_<something>.h. Как правило, это делается автоматически - инструменты, которые я упоминал в первой части, делают именно то, что каждый раз при изменении файла .ui.

Получив этот сгенерированный заголовочный файл, вы можете использовать его так же, как и в случае с Program class: наследовать от QWidget (QMainWindow также получено из него) и вызывать setupUi в конструкторе.

Еще одна вещь: QWindow это не , что вы хотите. Для приложений с графическим интерфейсом вам нужно использовать QWidget. QWindow используется внутренне (верхний уровень) QWidgets и иногда используется напрямую (например, когда необходимо использовать сторонний рендеринг вместо API Qt). Вы можете прочитать больше об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...