Вызов формы с кнопки с использованием только QtDesigner

Я создал форму. У меня много 2 кнопок. При нажатии на кнопку я хочу вызвать другую пользовательскую форму. Я использую только QtDesigner. Я НЕ использую QtCreator. Используя QtCreator, есть так много примеров того, как я могу это сделать. Но с использованием только QtDesigner 4 примеров нет. Я также попытался создать MainWindow, а затем добавить в него кнопки. Я хочу вызвать новое всплывающее окно, когда я нажимаю кнопку (это пользовательская форма). Я использую Eclipse CDT в качестве IDE. Я установил плагин Qt, чтобы я мог заниматься разработкой как на C++, так и на Qt. Проблема в том, что я не могу использовать «Форму», чтобы объявить свою пользовательскую форму в заголовочном файле главного окна.

В нескольких сообщениях я читал, что это невозможно сделать, используя только QtDesigner, а также читал, что это можно сделать с помощью QObject::connect. Пожалуйста, может ли кто-нибудь помочь мне подтвердить, можем ли мы это сделать, и если да, пожалуйста, не могли бы вы привести мне пример?


person nkp    schedule 03.01.2014    source источник
comment
Ответ Дмитрия Маркина должен помочь. Кроме того, я хотел бы отметить, что вам не нужен создатель qt или плагин qt от ecplise для разработки кода QT, потому что QT после moc является стандартным C++. Тем не менее, это помогает использовать создателя qt, и я рекомендую и использую его в качестве IDE для qt и для (простой) разработки на C++.   -  person TWE    schedule 03.01.2014
comment
@TWE: Боюсь, вы упускаете суть вместе с Дмитрием. OP - лучший и наиболее часто используемый QtDesigner!   -  person lpapp    schedule 05.01.2014


Ответы (2)


Да, это определенно возможно с C++. Вам понадобится connect() сигнал кнопки clicked() со слотом в вашей первой форме:

connect(pushButton, SIGNAL(clicked()), this, SLOT(show2ndForm()));

Хорошее место для подключения — ваш первый конструктор форм.

В этом слоте просто покажите свою вторую форму (например, используя QDialog::exec()):

void FirstForm::show2ndForm()
{
     static SecondForm *form = 0;
     if(!form)
         form = new SecondForm(this);
     form->exec();
}

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

Для немодальной формы вместо модальной используйте form->show() вместо exec().

person Dmitry Markin    schedule 03.01.2014
comment
ОП спрашивал о QtDesigner для соединения, а не о низкоуровневом коде или IDE с редактором, таким как QtCreator. - person lpapp; 04.01.2014

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

введите здесь описание изображения

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

Щелкните правой кнопкой мыши посередине главного окна и измените сигналы и слоты.

введите здесь описание изображения

Выберите сигналы изменения и опцию слота

введите здесь описание изображения

Используйте кнопку «Добавить», чтобы добавить новый слот.

введите здесь описание изображения

Нажмите кнопку «ОК», чтобы подтвердить это после выбора нужного имени.

введите здесь описание изображения

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

введите здесь описание изображения

Выберите свой собственный слот, и вы закончили с дизайнерскими частями. Не забудьте реализовать это в своем коде C++.

Если вам не нужен пользовательский слот, а встроенного будет достаточно, вы можете выбрать его, не выполняя предыдущих шагов. Они предоставлены для полноты.

person lpapp    schedule 04.01.2014