crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Создание только одного экземпляра окна
DEADHUNT
  опции профиля:
сообщение 27.1.2011, 22:59
Сообщение #11


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

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




Репутация:   2  


Цитата(Rocky @ 27.1.2011, 21:55) *
Litkevich Yuriy, а в чем отличие (может даже с точки зрения безопастности)
myclass *ptr = NULL;

от
myclass *ptr = 0;

это называется Qt головного мозга, когда C/C++ RTL/STL - зло, Qt - самое то.
NULL определяется в стандартных заголовках C, а в Qt всё переписывают/создают аналоги и наверное может получиться так что макрос NULL будет не объявлен(если язаешь только Qt заголовки)
в C++1x для этого есть nullptr

Сообщение отредактировал DEADHUNT - 27.1.2011, 23:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.1.2011, 7:39
Сообщение #12


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

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Раскрывающийся текст
для справки :)

//студийное определение
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif


а лично мне предпочитается 0 . Его писать проще


однако, отклонились от темы

Цитата(breeve @ 27.1.2011, 18:49) *
Как сделать чтобы окно можно было открыть только один раз.
Есть основное окно, и модальное диалоговое. У основного класса есть слот который создает диалоговое.
Если два раза нажать кнопку, будет два окна. Как перед созданием проверять есть ли уже такое окно, но только таким образом что если такого окна еще нет чтобы он не повис))?


если вне некой функции окно не используется (модальное ж всё-таки), то лучше просто инкапсулировать объект в теле функции:

void QMyClass::F(<...>)
{
   static QMyDialod  dialog(this);

  <...>


  int res=dialog.exec();

  <...>
}


для немодального:
void QMyClass::F(<...>)
{
  static QMyDialod  dialog(this);

  if(!dialog.isHidden())
  {
     dialog.show();
  }

  <...>
}


однако, следует помнить, что static переменная будет единая для ВСЕХ экземпляров класса QMyClass

Сообщение отредактировал Алексей1153 - 28.1.2011, 8:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 28.1.2011, 8:36
Сообщение #13


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Раскрывающийся текст
По-поводу
Цитата
//студийное определение
#ifndef NULL
#ifdef __cplusplus
#define NULL 0

Это я знаю ессно, просто тут видимо соглашусь с DEADHUNT. Штука не в том, что проще 0 писать.. Опасность даже не в том что NULL может быть не объявлен, а вот возьмут и сделают #define NULL 1 - и все, программа поплыла ))) Макросы зло)


По-поводу темы.
Алексей1153, может так лучше?
  if(dialog.isHidden())
  {
     dialog.show();
  }

ведь иначе после закрытия окна его отобразить 2-й раз уже не удастся.

Сообщение отредактировал Rocky - 28.1.2011, 8:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.1.2011, 8:40
Сообщение #14


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

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Цитата(Rocky @ 28.1.2011, 10:36) *
может так лучше?

может :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.1.2011, 21:14
Сообщение #15


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

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

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




Репутация:   94  


Цитата(Rocky @ 27.1.2011, 23:55) *
Просто я например, всегда, если указатель инициализирую - то NULL,
насолько я помню, NULL в С++ перешёл в разряд анахронизмов (старых привычек).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 11.12.2024, 16:38