Russian Qt Forum
Ноябрь 26, 2024, 19:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: вызов второй формы  (Прочитано 18787 раз)
lexflax
Гость
« : Декабрь 30, 2013, 03:55 »

Доброго времени суток.
Я новичек в qt, решил изучить работу с формами... создал проэкт Gui , веделил проэкт и вызвал на нем контекстное меню чтоб добавить новую форму "Добавить новый->qt-> форма qt designer.
Появилась вторая форма с именем mainwindow2.ui, хочу вызвать ее после нажатия кнопки расположенной на первой форме... как это можно сделать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Декабрь 30, 2013, 13:11 »

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

потом в обработчике кнопки пишешь например
Код
C++ (Qt)
MyWidget2 *w = new MyWidget2;
w->show();

вообще лучше читай книжку или хотя бы туториалы в документации — методом тыка разбираться будет ой как непросто.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
lexflax
Гость
« Ответ #2 : Декабрь 30, 2013, 16:24 »

добавил форму выбрав графу "класс формы qt widget"
содежимое form.h
Код:
#ifndef FORM_H
#define FORM_H

#include <QWidget>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT
   
public:
    explicit Form(QWidget *parent = 0);
    ~Form();
   
private:
    Ui::Form *ui;
};

#endif // FORM_H

Содержимое mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
   Form *w = new Form ; тут много ошибок выдает... что не правильно прописываю тут? вроде название класса Form как я понимаю
    w->show();
}
Записан
lexflax
Гость
« Ответ #3 : Декабрь 30, 2013, 16:38 »

добавил две строчки
Код:
#include "ui_form.h"
#include "form.h"
и запустилось...
Записан
lexflax
Гость
« Ответ #4 : Декабрь 30, 2013, 16:43 »

а как можно настроить чтоб форма выходила допустим в разных местах экрана какой укажем в настройках, и с определенным размером, есть код где можно такие настройки прописать?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Декабрь 30, 2013, 16:50 »

Методы move() и resize() в QWidget
Записан
lexflax
Гость
« Ответ #6 : Декабрь 31, 2013, 03:18 »

еще вопрос подскажите пожалуйста, вторая форма вызывается...
После нажатия кнопки надо чтоб форма закрывалась и пользователь снова видел основное меню
Записан
lexflax
Гость
« Ответ #7 : Декабрь 31, 2013, 03:25 »

Добавил такую строчку и форма стала закрыватся и возвращатся к основной
Код:
this->hide();
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Декабрь 31, 2013, 12:22 »

название метода как бы говорит нам, что форма просто прячется, а не закрывается. для закрытия есть метод close().

открой-ка справку по QWidget и почитай какие есть методы у него.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
lexflax
Гость
« Ответ #9 : Январь 01, 2014, 15:12 »

kambala, спасибо что всегда отвечаете, редко на форумах встречается...
hide на close заменил, теперь немного другая задача, при вызове новой формы надо чтоб старая форма на время работы в новой блокировалась, не подскажите как это сделать? пытался скрыть ее просто, но даже скрыть не получилось, а вообще нужна именно блокировка формы на любые действия...
Записан
lexflax
Гость
« Ответ #10 : Январь 01, 2014, 15:14 »

а скрыть пытался так, новую форму показать , основную скрыть
Код:
void MainWindow::on_action_activated()
{
    Form *w = new Form ;
     w->show();
MainWindow *a = new MainWindow;
a->hide();

}
Записан
lexflax
Гость
« Ответ #11 : Январь 02, 2014, 06:31 »

Блокрую так форму после вызова второй формыКод C++ (QT)
void MainWindow::on_action_activated()
Код:
{
    Form *w = new Form ;
     w->show();
 this->setEnabled(false);
}


Но проблема разблокировать теперь ее после закрытия формы Form.
 в файле form.cpp
 прописать Код C++ (QT)
Код:
this->setEnabled(true);


Нельзя, так как эту команду она отнесет не к первой форме mainwindow а к форме form, а форма mainwindow так и останется заблокированной((( как можно обратно после закрытия формы ее разблокировать?
Записан
Bepec
Гость
« Ответ #12 : Январь 02, 2014, 13:29 »

Вот тут уже начинается необходимость в системе сигнал-слотов или диалогов.

Самый простой выход - не блокировать основную форму так как вы, а просто делать дочернее окно модальным
Код:
setWindowModality ( Qt::WindowModality windowModality )

Или же создать сигнал у дочерней формы и связать его со слотом материнской Улыбающийся

Или же использовать форму, наследованную от диалога.
Записан
lexflax
Гость
« Ответ #13 : Январь 02, 2014, 14:19 »

Да, форма наследованная от Диалого стала хорошим выходом из ситуации
И вызов формы стал таким
Код:
Form *w = new Form ;
     w->exec();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.167 секунд. Запросов: 23.