Название: Вызов одной формы из другой Отправлено: vincent от Декабря 02, 2009, 21:58 Прошу "не пинать" сильно, если вопрос не сложный - но поискав в интернете - ответ на него так и не нашел.
Суть вопроса: необходимо из главной формы (mainwindow) вызвать (создать) еще одну форму (Form1). Делал все аналогично тому, что описано в справке, но при вызове второй формы (создается на основе QWidget) она появляется на доли секунды и исчезает, но в то же время, если форму сделать на основе QDialog и вызывать ее через exec() - то она появляется и все работает нормально. Такое чувство, что она исчезает тогда, когда завершается функция нажатия клавиши по событию которой она создается (я просто не понял еще точно всю модель сигналов и слотов QT, возможно тут как то по другому нужно работать). Подскажите где копать ну или киньте ссылкой где можно это почерпнуть, желательно с примером? Коды: mainwindow.cpp Код
form1.cpp Код
P/s: если важно, Qt 4.5.3 на Windows платформе; все формы создаются в дизайнере. Название: Re: Вызов одной формы из другой Отправлено: MoPDoBoPoT от Декабря 02, 2009, 22:27 Код Ты форму создаешь на стеке, поэтому при выходе из метода on_pushButton_clicked() объект разрушается. Чтобы форма дольше жила, надо создавать в куче, а чтобы не было утечки памяти, то и назначить ей родителя: Form1 w2 = new Form1(this); Можно еще флаг поставить, чтобы удалять окно при его закрытии: w2->setAttribute(Qt::WA_DeleteOnClose); Название: Re: Вызов одной формы из другой Отправлено: vincent от Декабря 02, 2009, 22:47 Ты форму создаешь на стеке, ... Можно еще флаг поставить, чтобы удалять окно при его закрытии: w2->setAttribute(Qt::WA_DeleteOnClose); Пробовал я и так сделать, вот еще раз повторил ... компилятор ругается: Цитировать e:/QT4/qt/include/QtGui/../../src/gui/kernel/qwidget.h:756: error: `QWidget::QWidget(const QWidget&)' is private C:/qt/test/mainwindow.cpp:18: error: within this context C:/qt/test/mainwindow.cpp:18: error: initializing temporary from result of `Form1::Form1(QWidget*)' Пропущен указатель был .. и я сразу не заметил ... но тем не менее - новая форма стала прямым потомком главной и соответственно за ее пределы выйти не может, а мне нужно малость другое - получить в итоге 2 формы к которым есть свободный доступ (при этом вторую форму вызывать по событию). UPD Спасибо MoPDoBoPoT сделал запуск Код: Form1 *w2 = new Form1(); Название: Re: Вызов одной формы из другой Отправлено: BRE от Декабря 02, 2009, 23:07 а мне нужно малость другое - получить в итоге 2 формы к которым есть свободный доступ (при этом вторую форму вызывать по событию). Ну так не указывай парента вообще или укажи нулевым.Название: Re: Вызов одной формы из другой Отправлено: vincent от Декабря 02, 2009, 23:08 а мне нужно малость другое - получить в итоге 2 формы к которым есть свободный доступ (при этом вторую форму вызывать по событию). Ну так не указывай парента вообще или укажи нулевым.Название: Re: Вызов одной формы из другой Отправлено: panAlexey от Декабря 02, 2009, 23:38 Классический вопрос-кандидат для фака по областям видимости и типу памяти..
хто там грозилсё его накидать? Название: Re: Вызов одной формы из другой Отправлено: MoPDoBoPoT от Декабря 03, 2009, 13:09 Извиняюсь за *, пропустил. Как говорится, поспешишь - людей насмешишь.
А насчет новая форма стала прямым потомком главной и соответственно за ее пределы выйти не может, а мне нужно малость другое - получить в итоге 2 формы к которым есть свободный доступ (при этом вторую форму вызывать по событию). так можно с парентом, только надо указать тип виджета - "окно". Лучше всего это сделать в конструкторе класса Form1, добавив строку this->setWindowFlags(Qt::Window); |