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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как грамотно писать программы на QT???  (Прочитано 6922 раз)
atarax
Гость
« : Ноябрь 24, 2010, 20:04 »

Здравствуйте я новичок QT и в С++, у меня есть ряд вопросов:
Есть класс MainWindow на основе QWitget, есть форма где все  набросано что мне надо.
Есть второй класс Options на основе QDialog созданный путем добавления новых файлов в проект (QT Designer Form Class).
Т.е у меня получилось 2 файла MainWindow.cpp, Options.cpp и 2 файла MainWindow.h, Option.h, 2 формы MainWindow.ui, Options.ui и сам файл main.cpp

В MainWindow реализовал QSystemTray т.е при сворачивание окна программа сидит в системтрее.
В MainWindow есть кнопка опции при нажатие отрывает мое диалоговое окно, в этом диалоговым окне есть checkbox  (добавить программу в системтрей), мне надо чтобы при нажатие на checkbox программа была в систем трее и при снятие флажка пропадала из трея, подобный пример мы видем  в плеере winAmp
Так вот что получается когда я в функции кнопки  Опции создаю
Код:
Option  *OptionDlg = new Option();
Option->show();
он не запоминает положение checkbox –а потому что он уничтожается, из-за этого я его инициализирую в конструкторе, а в кнопке вывожу его на экран
Код:
Option->show();
я правильно так делаю?
После того как я создал указатель на  класс Option в MainWindow, я немогу создать указатель в Option на MainWindow ругается
Пишет типа
ISO C++ forbids declaration of MainWindow with no type, в чем пожжет быть трабла
expected ; before * token
т.е не могу  подключить MainWindow в Option
в Option.h
Код:
#include MainWindow.h // так не катить
зато в MainWindow все в порядке.

Указатель нужен для доступа к методам из MainWindow в Option классе в частности нужен указатель на мой системтрей.
  
Я правильно делаю что бью формы на классы?
Как грамотно общаться между двумя классами?
Как сделать диалог опции чтоб запоминал и корректно работал с checkbox - ом?
пишу в винде, последний Qt sdk
буду признателен за помощь.
    
« Последнее редактирование: Ноябрь 25, 2010, 00:07 от atarax » Записан
zenden
Гость
« Ответ #1 : Ноябрь 24, 2010, 20:30 »

Какой многозначительный заголовок и какая банальная проблема...
Записан
atarax
Гость
« Ответ #2 : Ноябрь 25, 2010, 07:24 »

Все проблему  решил методом
dynamic_cast<MainWindow*>(this->parent())->pTrayIcon->show();
Записан
crossly
Гость
« Ответ #3 : Ноябрь 25, 2010, 11:06 »

какое извращение.... мот c++ подучить...??... в диалоге реализовать к примеру setCheckState getCheckState... диалоги обычно вызываются с помощью exec()
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 25, 2010, 12:22 »

Все проблему  решил методом
dynamic_cast<MainWindow*>(this->parent())->pTrayIcon->show();
А если вызывающий "внук" или "правнук"?

Код:
dynamic_cast<MainWindow*>(this->parent()->parent())->pTrayIcon->show();
dynamic_cast<MainWindow*>(this->parent()->parent()->parent())->pTrayIcon->show();
Будете так писать?
Записан
atarax
Гость
« Ответ #5 : Ноябрь 25, 2010, 18:35 »

Народ я с++ изучал 3 недели, конечно  я толком еще не понимаю всех аспектов языка, можно сказать я еще не понимаю ничего, я нуб в с++
спасибо за ответы, про мот тему посмотрю.
про dynamic_cast в данном случае он мне помог, не знаю как еще получить доступ из класса в класс, подскажите кто нить.   

на главное мне некто не ответил на мои вопросы,
так что жду еще критики. 
   
Записан
deaks
Гость
« Ответ #6 : Ноябрь 26, 2010, 01:17 »

Народ я с++ изучал 3 недели, конечно  я толком еще не понимаю всех аспектов языка, можно сказать я еще не понимаю ничего, я нуб в с++
спасибо за ответы, про мот тему посмотрю.
про dynamic_cast в данном случае он мне помог, не знаю как еще получить доступ из класса в класс, подскажите кто нить.  

на главное мне некто не ответил на мои вопросы,
так что жду еще критики.  
  

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

возьмите книгу Полный справочник по С++. Шилдт. и почитайте. а то что вам сейчас будут давать одиночные советы ни к чему хорошему не приведет.

ну а потом возьметесь за Qt4.Программирование GUI на c++. Бланшет
удачи!
« Последнее редактирование: Ноябрь 26, 2010, 01:20 от deaks » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Ноябрь 26, 2010, 06:27 »

>>подобный пример мы видем  в плеере winAmp
а ещё подобный пример мы видим в стандартном примере Qt - System Tray Icon. (см. каталог examples)
Записан

Юра.
crossly
Гость
« Ответ #8 : Ноябрь 26, 2010, 11:03 »

Народ я с++ изучал 3 недели, конечно  я толком еще не понимаю всех аспектов языка, можно сказать я еще не понимаю ничего, я нуб в с++
спасибо за ответы, про мот тему посмотрю.
про dynamic_cast в данном случае он мне помог, не знаю как еще получить доступ из класса в класс, подскажите кто нить.   

на главное мне некто не ответил на мои вопросы,
так что жду еще критики. 
   

как поступить я вам подсказал... а после 3х недель с++ Qt трогать рано... у вас будет проблема на проблеме... нельзя изучать с++ на Qt... разберитесь немного с с++ а потом возвращайтесь к Qt
Записан
atarax
Гость
« Ответ #9 : Ноябрь 26, 2010, 22:07 »

Всем спасибо намек понял
пойду учить с++
тему можно закрыть.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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