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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Диалоги  (Прочитано 4492 раз)
WebAngel
Гость
« : Июль 08, 2006, 20:45 »

Допустим есть: MainDialog, SettingsDialog, и OtherDialog.
В SettingsDialog - устанавливаются разные настройки.
Как правильно сделать, что бы доступ к SettingsDialog можно было получить из MainDialog, OtherDialog и вообще любого диалога?
Т.е. например, вызывается диалог в MainDialog и устанавливаются настройки и потом все эти настройки доступны другим диалогам.
Как это _правильно_ сделать?

Qt: 3.3.3

P.S. и, пользуясь случаем, хочу еще такое спросить:
как в QListView отлавливать нажатия клавишь? Какой для этого сигнал?

!ЗОС!
Записан
QCasper
Гость
« Ответ #1 : Июль 08, 2006, 21:37 »

Цитата: "WebAngel"
Допустим есть: MainDialog, SettingsDialog, и OtherDialog.
В SettingsDialog - устанавливаются разные настройки.
Как правильно сделать, что бы доступ к SettingsDialog можно было получить из MainDialog, OtherDialog и вообще любого диалога?
Т.е. например, вызывается диалог в MainDialog и устанавливаются настройки и потом все эти настройки доступны другим диалогам.
Как это _правильно_ сделать?

Qt: 3.3.3

P.S. и, пользуясь случаем, хочу еще такое спросить:
как в QListView отлавливать нажатия клавишь? Какой для этого сигнал?

!ЗОС!


хм, а че тут непонятного, методы чтения делай и читай в чем проблема то?
например можно в классе MainDialog создавать объекты SettingsDialog и ОtherDialog и читать все что угодно, а если в свою очередь нужно в этих двух поиметь данные мэйна, то можно передать им указатель на мэйн. А еще все это можно связать сигналами и слотами, особенно хорошо если нужна синхронизация, типа если тут изменилось, то там должно отобразиться.

а по поводу QListView, это такой же виджет, нужно обработать событие QKeyEvent, указатель на объект класса которого приходит в keyPressEvent
Записан
WebAngel
Гость
« Ответ #2 : Июль 08, 2006, 22:07 »

Мне надо в ОtherDialog прочитать данные  SettingsDialog, который создается в MainDialog.  
Ситуация такая:
в MainDialog создается SettingsDialog и обект CSpecialFunctcional (а в этом CSpecialFunctcional создается OtherDialog) .
Вот как в OtherDialog получить достуа к SettingsDialog, уже созданному в MainDialog?

Может Вам это елементано, но мы вот недавно начали знакомится и если не сложно, то можно несколько строк кода Улыбающийся
Записан
Sergeich
Гость
« Ответ #3 : Июль 09, 2006, 00:56 »

Вообще в ООП принята такая практика: данные и их представление разделеляются, т.е. в данном случае нужно выделить отдельный класс для хранения данных приложения( скажем AppSettings ), и класс диалога для модификации этих данных. Чтобы данные класса AppSettings были доступны из любого класса приложения применяется т. н. паттерн Singleton. Суть вкратце в следующем: экземпляр класса AppSettings можно получить только через один определенный статический метод, к-ый возвращает указатель на этот класс.
Код:

/* appsettings.h*/
class AppSettings
{
public:
  static AppSettings* instance();
  ....
private:
  AppSettings();
  AppSettings* aInstance;
  ....
};

/* appsettings.cpp*/

static AppSettings* AppSettings::aInstance = 0;

AppSettings* AppSettings::instance()
{
   if ( ! aInstance ) aInstance = new AppSettings();
   return aInstance;
}

Все это очень хорошо написано в книге Эрика Гаммы и сотоварищей "Паттерны проектирования", т.н. "Design Patterns" from Gang of Four ( GoF ), к-ую рекомендую к прочтению.
Записан
WebAngel
Гость
« Ответ #4 : Июль 09, 2006, 07:11 »

Sergeich, спасибо большое! Заработало Улыбающийся
Чесно говоря я думал, что здесь, в Qt, будет для этого что то специфичное... но не до такой же степени
Записан
QCasper
Гость
« Ответ #5 : Июль 09, 2006, 11:48 »

Цитата: "WebAngel"
Sergeich, спасибо большое! Заработало Улыбающийся
Чесно говоря я думал, что здесь, в Qt, будет для этого что то специфичное... но не до такой же степени


синглтон это не Qt, это ООП

добавлено спустя 4 минуты:

 
Цитата: "Sergeich"
Вообще в ООП принята такая практика: данные и их представление разделеляются, т.е. в данном случае нужно выделить отдельный класс для хранения данных приложения( скажем AppSettings ), и класс диалога для модификации этих данных. Чтобы данные класса AppSettings были доступны из любого класса приложения применяется т. н. паттерн Singleton. Суть вкратце в следующем: экземпляр класса AppSettings можно получить только через один определенный статический метод, к-ый возвращает указатель на этот класс.
Код:

/* appsettings.h*/
class AppSettings
{
public:
  static AppSettings* instance();
  ....
private:
  AppSettings();
  AppSettings* aInstance;
  ....
};

/* appsettings.cpp*/

static AppSettings* AppSettings::aInstance = 0;

AppSettings* AppSettings::instance()
{
   if ( ! aInstance ) aInstance = new AppSettings();
   return aInstance;
}

Все это очень хорошо написано в книге Эрика Гаммы и сотоварищей "Паттерны проектирования", т.н. "Design Patterns" from Gang of Four ( GoF ), к-ую рекомендую к прочтению.


в этот класс не мешало бы еще вставить что-нить типа

Код:
static void destroy() {
   if (aInstance)
      delete aInstance, aInstance = 0;
}


Sergeich, а есть у тебя такая книжка на русском?
Записан
SLiDER
Гость
« Ответ #6 : Июль 09, 2006, 23:48 »

Цитата: "QCasper"
а есть у тебя такая книжка на русском?


По русски эта книжка называется "Приемы объектно-ориентированного проектирования. Паттерны проектирования". Издана издательским домом "Питер" в 2003 году. Переиздание от 2006 года можно найти, например, здесь http://www.ozon.ru/context/detail/id/2457392/, за 247 наших деревянных. К сожалению в электронном виде встречается только на английском (может быть только мне  Грустный  :?: ).

З.Ы. Книга как говорится из серии "must have".
З.З.Ы. Из серии "парадигмы программирования" еще очень бы рекомендовал всем ознакомиться с книгой К. Чарнецки и У. Айзенекера "Порождающее программирование. Методы, инструменты, применение"  того же издательства (http://www.bolero.ru//product-38226152.html), что бы, так сказать, не зацикливаться на одном.  Веселый Особенно рекомендую главу про "аспектно-ориентированное программирование" ( 8 ) и "статическое метапрограммирование на языке С++" (10). А там еще есть глава (11) про "ментальное программирование"  Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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