crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Две формы !, проблемка при функции show() у второй формы
maxvanceffer
  опции профиля:
сообщение 9.6.2009, 19:26
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Подскажите почему так происходит :

Вообщем после того как первая форма делает всё что нужно должна отобразиться вторая (её я добавил через креатор, то есть он сам там все инклуды прописал) я делаю примерно следующее

void Splash::vsioOK(){
   MainDialog w;
   w.show();
}


И после того как отрабатывает эта функция второе окно на секунду появляться её края и она тут же исчезает а винда подаёт звук что действие не может быть выполнена .

Ребять кто знает почему она не отображаться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.6.2009, 19:40
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


после выхода из функции объект перестанет существовать
это С++
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 9.6.2009, 23:11
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да уж представляю как смеялись когда отвечали ....
Да уж не подскажите где его объявлять лучше что доступ был с первой формы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.6.2009, 23:27
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


maxvanceffer, если это диалог, который должен блокировать основное окно приложения, для ввода неких данных, то см. примеры в QDialog.

Если самостоятельное окно, то объяви указатель в родительском классе, а окно создавай оператором new
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 9.6.2009, 23:29
Сообщение #5


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(maxvanceffer @ 10.6.2009, 0:11) *
Да уж представляю как смеялись когда отвечали ....
Достаточно распространеная ошибка, так что никто не смеялся.

В классе Splash, создай указатель на класс MainWindow
MainWindow *w;
В конструкторе, обнули этот указатель.

Твой метод переделываем след. образом
void Splash::vsioOK(){
    if(!w) {
        w = new MainDialog(this);
        connect(); \\соединяешь нужные сигналы со слотами
    }
    w->show();
    w->activateWindow();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 10.6.2009, 12:16
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


А вот тут возник такой вопрос. Вот в первой форме набралось много нужных функции для второго окна. И чтоб не переписывать их все а наследовать или как виртуальными как это можно сделать ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 13.6.2009, 5:40
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот я сделал всё по совету igor_bogomolov через указатели.

А как теперь получить обратный доступ к первой форме ? В частности её событию show();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.6.2009, 10:27
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(maxvanceffer @ 13.6.2009, 9:40) *
А как теперь получить обратный доступ к первой форме ? В частности её событию show();
А зачем тебе обратный доступ от ребёнка к родителю?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 13.6.2009, 20:31
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Просто первая прячится при открывании второй, что не плодить окон одной программы. Да и пользователь будет больше всего времени находиться в первом окне. Вот и нужно назад показать главную форму. Помогите плиз как это сделать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.6.2009, 21:27
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Если ты передаёшь во второе окно указатель на первое, то этим указателем и воспользуйся (вызови метод show())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.10.2024, 18:30