Как я могу определить, является ли диалог пустым в Qt? - PullRequest
3 голосов
/ 06 марта 2011

Я пытаюсь показать простой диалог вроде этого:

if (!aboutDialog)
        aboutDialog = new AboutDialog(this);
    aboutDialog->exec();

По какой-то причине он не работает (у aboutDialog есть некоторый указатель, хотя он не инициализирован), проверка if (aboutDialog == 0) не делает 'тоже не работает.Я не хочу создавать экземпляр каждый раз, но только один раз.Как мне проверить это правильно?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 06 марта 2011

Вам нужно где-то явно инициализировать aboutDialog в 0. Вероятно, в конструкторе класса, к которому принадлежит этот член.

(!aboutDialog) - правильный тест.

Учтите следующее:

#include <iostream>

class Thing {
  void *data;
  public:
    Thing(){}
    void print() {
      std::cout << data << std::endl;
  }
};

int main()
{
  Thing t;
  t.print();
  return 0;
 }

Попробуйте скомпилировать это и запустить его несколько раз. Скорее всего, он будет печатать что-то другое каждый раз. Зачем? Потому что data неинициализирован. Содержит мусор. У него столько же шансов быть нулевым указателем, сколько у 0x1234ABCD или 42.

Чтобы это исправить, data необходимо где-то инициализировать . Самый простой способ - просто сделать это в конструкторе Thing, как показано ниже:

Thing() : data(0) {}
0 голосов
/ 06 марта 2011

Мой ответ, вероятно, не самый лучший :) Я использую Qt с python, где вы (в python) можете писать новые атрибуты в класс, когда захотите «извне».Если возможно, я бы установил переменную (опять же, может быть, не лучшую практику) для некоторого значения, когда вы создаете aboutDialog.Затем вы можете проверить, установлено ли это позже.Как переменная состояния или что-то :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...