Spec-Zone.ru › Qt 6.0

Класс QPointer

шаблон <typename T> класс QPointer

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

Заголовок: #include <QPointer>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
  • Список всех членов, включая наследуемые

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

QPointer(T *p)
QPointer()
~QPointer()
void clear()
T * data() const
T * get() 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 QPointer<T> &p1, const QPointer<X> &p2)
bool operator!=(const QPointer<T> &p, X *o)
bool operator!=(X *o, const QPointer<T> &p)
bool operator!=(const QPointer<T> &lhs, std::nullptr_t)
bool operator!=(std::nullptr_t, const QPointer<T> &rhs)
bool operator==(const QPointer<T> &p1, const QPointer<X> &p2)
bool operator==(const QPointer<T> &p, X *o)
bool operator==(X *o, const QPointer<T> &p)
bool operator==(const QPointer<T> &lhs, std::nullptr_t)
bool operator==(std::nullptr_t, const QPointer<T> &rhs)

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

Защищённый указатель 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()

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

[since 5.0] void QPointer::clear()

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

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

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

T *QPointer::data() const

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

[since 6.0] T *QPointer::get() const

То же самое, что и data(). Эта функция предоставляется для совместимости со STL.

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

bool QPointer::isNull() const

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

[since 5.6] 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.

Связанные внешние функции

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

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

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

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

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

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

bool operator!=(const QPointer<T> &lhs, std::nullptr_t)

Оператор неравенства. Возвращает true, если указатель, защищённый lhs, является валидным (т.е. не nullptr) указателем, в противном случае возвращает false.

bool operator!=(std::nullptr_t, const QPointer<T> &rhs)

Оператор неравенства. Возвращает true, если указатель, защищённый rhs, является валидным (т.е. не nullptr) указателем, в противном случае возвращает false.

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

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

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

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

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

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

bool operator==(const QPointer<T> &lhs, std::nullptr_t)

Оператор равенства. Возвращает true, если указатель, защищённый lhs, является nullptr, в противном случае возвращает false.

bool operator==(std::nullptr_t, const QPointer<T> &rhs)

Оператор равенства. Возвращает true, если указатель, защищённый rhs, является nullptr, в противном случае возвращает false.

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

Spec-Zone.ru

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