Spec-Zone.ru › Qt 5.11

Класс QPointer

Класс QPointer — шаблонный класс, предоставляющий защищённые указатели на QObject. Подробнее...

Заголовок: #include <QPointer>
qmake: QT += core
  • Список всех членов, включая унаследованные

Открытые функции

QPointer()
QPointer(T *p)
~QPointer()
void clear()
T * data() const
bool isNull() const
void swap(QPointer<T> &other)
T * operator T *() const
T & operator*() const
T * operator->() const
QPointer<T> & operator=(T *p)

Связанные внешние элементы

bool operator!=(const T *o, const QPointer<T> &p)
bool operator!=(const QPointer<T> &p, const T *o)
bool operator!=(T *o, const QPointer<T> &p)
bool operator!=(const QPointer<T> &p, T *o)
bool operator!=(const QPointer<T> &p1, const QPointer<T> &p2)
bool operator==(const T *o, const QPointer<T> &p)
bool operator==(const QPointer<T> &p, const T *o)
bool operator==(T *o, const QPointer<T> &p)
bool operator==(const QPointer<T> &p, T *o)
bool operator==(const QPointer<T> &p1, const QPointer<T> &p2)

Подробное описание

Класс QPointer — шаблонный класс, предоставляющий защищённые указатели на QObject.

Защищённый указатель QPointer<T> ведёт себя как обычный C++ указатель T *, за исключением того, что он автоматически устанавливается в 0, когда ссылкаемый объект уничтожается (в отличие от обычных C++ указателей, которые в таких случаях становятся «висячими указателями»). T должен быть подклассом QObject.

Защищённые указатели полезны всякий раз, когда вам нужно хранить указатель на QObject, который принадлежит кому-то другому и, следовательно, может быть уничтожен, в то время как вы всё ещё держите ссылку на него. Вы можете безопасно проверить указатель на валидность.

Обратите внимание, что в Qt 5 произошли незначительные изменения в поведении при использовании QPointer.

  • При использовании QPointer на QWidget (или подклассе QWidget), ранее QPointer очищался деструктором QWidget. Теперь QPointer очищается деструктором QObject (так как именно в этот момент очищаются объекты QWeakPointer). Любые QPointer, отслеживающие виджет, НЕ будут очищены до того, как деструктор QWidget уничтожит дочерние элементы для отслеживаемого виджета.

Qt также предоставляет QSharedPointer, реализацию ссылочно-счётного общего указателя, который можно использовать для поддержания коллекции ссылок на отдельный указатель.

Пример:

    QPointer<QLabel> label = new QLabel;
    label->setText("&Status:");
    ...
    if (label)
        label->show();

Если QLabel удаляется в это время, переменная label будет содержать 0 вместо недействительного адреса, и последняя строка никогда не будет выполнена.

Функции и операторы, доступные с QPointer, такие же, как и с обычным незащищённым указателем, за исключением операторов арифметики указателей (+, -, ++, и --), которые обычно используются только с массивами объектов.

Используйте QPointer как обычные указатели, и вам не нужно будет читать документацию по этому классу.

Для создания защищённых указателей вы можете создать или присвоить их из T* или из другого защищённого указателя того же типа. Вы можете сравнивать их друг с другом, используя operator==() и operator!=(), или проверять на 0 с помощью isNull(). Вы можете получить к ним доступ с помощью *x или x->member.

Защищённый указатель автоматически преобразуется в T *, поэтому вы можете свободно смешивать защищённые и незащищённые указатели. Это означает, что если у вас есть QPointer<QWidget>, вы можете передать его функции, которая требует QWidget *. По этой причине мало смысла объявлять функции, принимающие QPointer в качестве параметра; просто используйте обычные указатели. Используйте QPointer, когда вам нужно хранить указатель со временем.

Обратите внимание, что класс T должен наследоваться от QObject, иначе произойдёт ошибка компиляции или компоновки.

См. также QSharedPointer, QObject и QObjectCleanupHandler.

Документация по членам-функциям

QPointer::QPointer()

Создаёт защищённый указатель, равный 0.

См. также isNull().

QPointer::QPointer(T *p)

Создаёт защищённый указатель, указывающий на тот же объект, что и p.

QPointer::~QPointer()

Уничтожает защищённый указатель. Как и обычный указатель, уничтожение защищённого указателя не уничтожает объект, на который он указывает.

void QPointer::clear()

Очищает этот объект QPointer.

Эта функция была добавлена в Qt 5.0.

См. также isNull().

T *QPointer::data() const

Возвращает указатель на защищаемый объект.

Эта функция была добавлена в Qt 4.4.

bool QPointer::isNull() const

Возвращает true, если ссылкаемый объект был уничтожен или если нет ссылкаемого объекта; в противном случае возвращает false.

void QPointer::swap(QPointer<T> &other)

Меняет содержимое этого QPointer с содержимым other. Эта операция очень быстрая и никогда не терпит неудачу.

Эта функция была добавлена в Qt 5.6.

T *QPointer::operator T *() const

Оператор преобразования; реализует семантику указателя. Благодаря этой функции вы можете передать QPointer<T> в функцию, где требуется T*.

T &QPointer::operator*() const

Оператор разыменования; реализует семантику указателя. Используйте этот оператор так же, как и с обычным C++ указателем.

T *QPointer::operator->() const

Перегруженный оператор стрелки; реализует семантику указателя. Используйте этот оператор так же, как и с обычным C++ указателем.

QPointer<T> &QPointer::operator=(T *p)

Оператор присваивания. Этот защищённый указатель теперь указывает на тот же объект, что и p.

Связанные не члены

bool operator!=(const T *o, const QPointer<T> &p)

Оператор неравенства. Возвращает true если o и защищённый указатель p не указывают на один и тот же объект, в противном случае возвращает false.

bool operator!=(const QPointer<T> &p, const T *o)

Оператор неравенства. Возвращает true если o и защищённый указатель p не указывают на один и тот же объект, в противном случае возвращает false.

bool operator!=(T *o, const QPointer<T> &p)

Оператор неравенства. Возвращает true если o и защищённый указатель p не указывают на один и тот же объект, в противном случае возвращает false.

bool operator!=(const QPointer<T> &p, T *o)

Оператор неравенства. Возвращает true если o и защищённый указатель p не указывают на один и тот же объект, в противном случае возвращает false.

bool operator!=(const QPointer<T> &p1, const QPointer<T> &p2)

Оператор неравенства. Возвращает true если защищённые указатели p1 и p2 не указывают на один и тот же объект, в противном случае возвращает false.

bool operator==(const T *o, const QPointer<T> &p)

Оператор равенства. Возвращает true если o и защищённый указатель p указывают на один и тот же объект, в противном случае возвращает false.

bool operator==(const QPointer<T> &p, const T *o)

Оператор равенства. Возвращает true если o и защищённый указатель p указывают на один и тот же объект, в противном случае возвращает false.

bool operator==(T *o, const QPointer<T> &p)

Оператор равенства. Возвращает true если o и защищённый указатель p указывают на один и тот же объект, в противном случае возвращает false.

bool operator==(const QPointer<T> &p, T *o)

Оператор равенства. Возвращает true если o и защищённый указатель p указывают на один и тот же объект, в противном случае возвращает false.

bool operator==(const QPointer<T> &p1, const QPointer<T> &p2)

Оператор равенства. Возвращает true если защищённые указатели p1 и p2 указывают на один и тот же объект, в противном случае возвращает false.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qpointer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API