Spec-Zone.ru › Qt 5.13

Класс QPointer

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

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

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

QPointer(T *p)
QPointer()
~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<T> ведет себя как обычный C++ указатель T *, за исключением того, что он автоматически очищается при уничтожении ссылаемого объекта (в отличие от обычных 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 будет содержать nullptr вместо некорректного адреса, и последняя строка никогда не будет выполнена.

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

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

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

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

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

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

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

QPointer::QPointer(T *p)

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

QPointer::QPointer()

Создаёт защищённый указатель со значением nullptr.

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

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 QPointer::operator!=(const T *o, const QPointer<T> &p)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

bool QPointer::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/qt-5.13/qpointer.html

Spec-Zone.ru

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