Spec-Zone.ru › Qt 6.0

<QtGlobal> - Глобальные объявления Qt

Заголовочный файл <QtGlobal> содержит основные глобальные объявления. Он включается в большинстве других заголовочных файлов Qt. Подробнее...

Заголовок: #include <QtGlobal>
  • Устаревшие члены

Типы

QFunctionPointer
QtMessageHandler
Перечисление QtMsgType { QtDebugMsg, QtInfoMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg }
qint8
qint16
qint32
qint64
qintptr
qlonglong
qptrdiff
qreal
qsizetype
quint8
quint16
quint32
quint64
quintptr
qulonglong
uchar
uint
ulong
ushort

Функции

T qAbs(const T &t)
typename std::add_const<T>::type & qAsConst(T &t)
void qAsConst(const T &&t)
const T & qBound(const T &min, const T &val, const T &max)
auto qConstOverload(T memberFunctionPointer)
QString qEnvironmentVariable(const char *varName)
QString qEnvironmentVariable(const char *varName, const QString &defaultValue)
int qEnvironmentVariableIntValue(const char *varName, bool *ok = nullptr)
bool qEnvironmentVariableIsEmpty(const char *varName)
bool qEnvironmentVariableIsSet(const char *varName)
T qExchange(T &obj, U &&newValue)
quint32 qFloatDistance(float a, float b)
quint64 qFloatDistance(double a, double b)
QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, const QString &str)
int qFpClassify(double val)
int qFpClassify(float val)
bool qFuzzyCompare(double p1, double p2)
bool qFuzzyCompare(float p1, float p2)
bool qFuzzyIsNull(double d)
bool qFuzzyIsNull(float f)
double qInf()
QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)
bool qIsFinite(double d)
bool qIsFinite(float f)
bool qIsInf(double d)
bool qIsInf(float f)
bool qIsNaN(double d)
bool qIsNaN(float f)
const T & qMax(const T &a, const T &b)
const T & qMin(const T &a, const T &b)
auto qNonConstOverload(T memberFunctionPointer)
auto qOverload(T functionPointer)
double qQNaN()
qint64 qRound64(double d)
qint64 qRound64(float d)
int qRound(double d)
int qRound(float d)
double qSNaN()
void qSetMessagePattern(const QString &pattern)
const char * qVersion()
T * q_check_ptr(T *p)
QByteArray qgetenv(const char *varName)
bool qputenv(const char *varName, const QByteArray &value)
QString qtTrId(const char *id, int n = -1)
bool qunsetenv(const char *varName)

Макросы

QT_DEPRECATED_WARNINGS
QT_DISABLE_DEPRECATED_BEFORE
QT_NO_DEPRECATED_WARNINGS
QT_POINTER_SIZE
QT_REQUIRE_VERSION(int argc, char **argv, const char *version)
QT_TRANSLATE_NOOP3(context, sourceText, disambiguation)
QT_TRANSLATE_NOOP(context, sourceText)
QT_TRANSLATE_N_NOOP3(context, sourceText, comment)
QT_TRANSLATE_N_NOOP(context, sourceText)
QT_TRID_NOOP(id)
QT_TR_NOOP(sourceText)
QT_TR_N_NOOP(sourceText)
QT_VERSION
QT_VERSION_CHECK
QT_VERSION_STR
void Q_ASSERT(bool test)
void Q_ASSERT_X(bool test, const char *where, const char *what)
void Q_ASSUME(bool expr)
Q_BIG_ENDIAN
Q_BYTE_ORDER
Q_CC_BOR
Q_CC_CDS
Q_CC_CLANG
Q_CC_COMEAU
Q_CC_DEC
Q_CC_EDG
Q_CC_GHS
Q_CC_GNU
Q_CC_HIGHC
Q_CC_HPACC
Q_CC_INTEL
Q_CC_KAI
Q_CC_MIPS
Q_CC_MSVC
Q_CC_OC
Q_CC_PGI
Q_CC_SUN
Q_CC_SYM
Q_CC_USLC
Q_CC_WAT
void Q_CHECK_PTR(void *pointer)
Q_DECLARE_TYPEINFO(Type, Flags)
Q_DECL_CONSTEXPR
Q_DECL_EXPORT
Q_DECL_IMPORT
Q_DECL_NOEXCEPT
Q_DECL_NOEXCEPT_EXPR(x)
Q_DECL_NOTHROW
Q_DECL_RELAXED_CONSTEXPR
void Q_FALLTHROUGH
Q_FOREACH(variable, container)
Q_FOREVER
Q_FORWARD_DECLARE_CF_TYPE(type)
Q_FORWARD_DECLARE_MUTABLE_CF_TYPE(type)
Q_FORWARD_DECLARE_OBJC_CLASS(classname)
const char* Q_FUNC_INFO
qint64 Q_INT64_C(literal)
Q_LIKELY(expr)
Q_LITTLE_ENDIAN
Q_OS_AIX
Q_OS_ANDROID
Q_OS_BSD4
Q_OS_CYGWIN
Q_OS_DARWIN
Q_OS_FREEBSD
Q_OS_HPUX
Q_OS_HURD
Q_OS_IOS
Q_OS_LINUX
Q_OS_LYNX
Q_OS_MAC
Q_OS_MACOS
Q_OS_NETBSD
Q_OS_OPENBSD
Q_OS_OSX
Q_OS_QNX
Q_OS_SOLARIS
Q_OS_TVOS
Q_OS_UNIX
Q_OS_WASM
Q_OS_WATCHOS
Q_OS_WIN32
Q_OS_WIN64
Q_OS_WIN
Q_OS_WINDOWS
Q_PROCESSOR_X86
Q_PROCESSOR_S390
Q_PROCESSOR_ALPHA
Q_PROCESSOR_ARM
Q_PROCESSOR_ARM_V5
Q_PROCESSOR_ARM_V6
Q_PROCESSOR_ARM_V7
Q_PROCESSOR_AVR32
Q_PROCESSOR_BLACKFIN
Q_PROCESSOR_IA64
Q_PROCESSOR_MIPS
Q_PROCESSOR_MIPS_32
Q_PROCESSOR_MIPS_64
Q_PROCESSOR_MIPS_I
Q_PROCESSOR_MIPS_II
Q_PROCESSOR_MIPS_III
Q_PROCESSOR_MIPS_IV
Q_PROCESSOR_MIPS_V
Q_PROCESSOR_POWER
Q_PROCESSOR_POWER_32
Q_PROCESSOR_POWER_64
Q_PROCESSOR_RISCV
Q_PROCESSOR_RISCV_32
Q_PROCESSOR_RISCV_64
Q_PROCESSOR_S390_X
Q_PROCESSOR_SH
Q_PROCESSOR_SH_4A
Q_PROCESSOR_SPARC
Q_PROCESSOR_SPARC_V9
Q_PROCESSOR_X86_32
Q_PROCESSOR_X86_64
quint64 Q_UINT64_C(literal)
Q_UNLIKELY(expr)
void Q_UNREACHABLE
Q_UNUSED(name)
foreach(variable, container)
forever
qCritical(const char *message, ...)
qDebug(const char *message, ...)
qFatal(const char *message, ...)
qInfo(const char *message, ...)
const char * qPrintable(const QString &str)
const wchar_t * qUtf16Printable(const QString &str)
const char * qUtf8Printable(const QString &str)
qWarning(const char *message, ...)

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

Глобальные объявления включают типы, функции и макросы.

Определения типов частично представляют собой удобные определения для основных типов (некоторые из которых гарантируют определенные разрядности на всех платформах, поддерживаемых Qt), частично — типы, связанные с обработкой сообщений Qt. Функции связаны с генерированием сообщений, обработкой версии Qt и сравнением и корректировкой значений объектов. И, наконец, некоторые из объявленных макросов позволяют программистам добавлять код, специфичный для компилятора или платформы, в свои приложения, в то время как другие являются удобными макросами для более сложных операций.

Типы

Файл заголовка объявляет несколько определений типов, которые гарантируют указанную разрядность на всех платформах, поддерживаемых Qt, для различных основных типов, например, qint8, который представляет собой знаковый char, гарантированно имеющий 8 бит на всех платформах, поддерживаемых Qt. Файл заголовка также объявляет определение типа qlonglong для long long int (__int64 в Windows).

Объявляются несколько удобных определений типов: qreal для double или float, uchar для unsigned char, uint для unsigned int, ulong для unsigned long и ushort для unsigned short.

Наконец, определение QtMsgType идентифицирует различные сообщения, которые могут быть сгенерированы и отправлены обработчику сообщений Qt; QtMessageHandler — это определение типа указателя на функцию со сигнатурой void myMessageHandler(QtMsgType, const QMessageLogContext &, const char *). Класс QMessageLogContext содержит строку, имя файла и имя функции, в которых было записано сообщение. Эта информация создаётся классом QMessageLogger.

Функции

Заголовочный файл <QtGlobal> содержит несколько функций для сравнения и изменения значения объекта. Эти функции принимают тип шаблона в качестве аргумента: Вы можете получить абсолютное значение объекта, используя функцию qAbs(), и вы можете ограничить значение данного объекта заданными минимальным и максимальным значениями, используя функцию qBound(). Вы можете получить минимальное и максимальное значения двух заданных объектов, используя соответственно qMin() и qMax(). Все эти функции возвращают соответствующий тип шаблона; типы шаблонов могут быть заменены любым другим типом.

Пример:

int myValue = 10;
int minValue = 2;
int maxValue = 6;

int boundedValue = qBound(minValue, myValue, maxValue);
// boundedValue == 6

<QtGlobal> также содержит функции, которые генерируют сообщения из заданного строкового аргумента: qDebug(), qInfo(), qWarning(), qCritical() и qFatal(). Эти функции вызывают обработчик сообщений с заданным сообщением.

Пример:

if (!driver()->isOpen() || driver()->isOpenError()) {
    qWarning("QSqlQuery::exec: database not open");
    return false;
}

Остальные функции — это qRound() и qRound64(), которые обе принимают double или float значение в качестве аргумента, возвращая значение, округлённое до ближайшего целого и 64-разрядного целого числа соответственно, функция qInstallMessageHandler(), которая устанавливает заданный QtMessageHandler, и функция qVersion(), которая возвращает номер версии Qt во время выполнения в виде строки.

Макросы

Заголовочный файл <QtGlobal> предоставляет ряд макросов (Q_CC_*), которые определяются, если приложение скомпилировано с использованием указанных платформ. Например, макрос Q_CC_SUN определён, если приложение скомпилировано с использованием Forte Developer или Sun Studio C++. Заголовочный файл также объявляет ряд макросов (Q_OS_*), которые определены для указанных платформ. Например, Q_OS_UNIX, который определён для систем на базе Unix.

Цель этих макросов — предоставить программистам возможность добавлять код, специфичный для компилятора или платформы, в своё приложение.

Остальные макросы — это макросы для удобства выполнения более крупных операций: макросы QT_TR_NOOP(), QT_TRANSLATE_NOOP() и QT_TRANSLATE_NOOP3() позволяют пометить строки для отложенного перевода. QT_TR_N_NOOP(), QT_TRANSLATE_N_NOOP() и QT_TRANSLATE_N_NOOP3() — это варианты, зависящие от номера перечисления. Макросы Q_ASSERT() и Q_ASSERT_X() обеспечивают сообщения об ошибках различной степени детализации. Макросы Q_FOREACH() и foreach() реализуют цикл foreach Qt.

Макросы Q_INT64_C() и Q_UINT64_C() оборачивают целые 64-битные значения со знаком и без знака в платформенно-независимом виде. Макрос Q_CHECK_PTR() выводит предупреждение, содержащее имя файла и номер строки исходного кода, сообщая, что программа закончилась выделением памяти, если указатель nullptr.

Макросы qPrintable() и qUtf8Printable() представляют собой удобный способ вывода текста.

Макрос QT_POINTER_SIZE расширяется до размера указателя в байтах.

Макросы QT_VERSION и QT_VERSION_STR соответственно расширяются до числового значения или строки, которые указывают версию Qt, к которой скомпилировано приложение.

См. также <QtAlgorithms> и QSysInfo.

Документация по типам

QFunctionPointer

Это typedef для void (*)(), указателя на функцию без аргументов, возвращающую void.

[since 5.0] QtMessageHandler

Это typedef для указателя на функцию со следующей сигнатурой:

void myMessageHandler(QtMsgType, const QMessageLogContext &, const QString &);

Этот typedef был введён в Qt 5.0.

См. также QtMsgType и qInstallMessageHandler().

Перечисление QtMsgType

Это перечисление описывает сообщения, которые могут быть отправлены обработчику сообщений (QtMessageHandler). Вы можете использовать перечисление для идентификации и сопоставления различных типов сообщений с соответствующими действиями.

Константа Значение Описание
QtDebugMsg 0 Сообщение, сгенерированное функцией qDebug().
QtInfoMsg 4 Сообщение, сгенерированное функцией qInfo().
QtWarningMsg 1 Сообщение, сгенерированное функцией qWarning().
QtCriticalMsg 2 Сообщение, сгенерированное функцией qCritical().
QtFatalMsg 3 Сообщение, сгенерированное функцией qFatal().
QtSystemMsg QtCriticalMsg

QtInfoMsg был добавлен в Qt 5.5.

См. также QtMessageHandler и qInstallMessageHandler().

qint8

Тип-синоним для signed char. Этот тип гарантированно имеет 8 бит на всех платформах, поддерживаемых Qt.

qint16

Тип-синоним для signed short. Этот тип гарантированно имеет 16 бит на всех платформах, поддерживаемых Qt.

qint32

Тип-синоним для signed int. Этот тип гарантированно имеет 32 бита на всех платформах, поддерживаемых Qt.

qint64

Тип-синоним для long long int (__int64 на Windows). Этот тип гарантированно имеет 64 бита на всех платформах, поддерживаемых Qt.

Литералы этого типа можно создавать с помощью макроса Q_INT64_C():

qint64 value = Q_INT64_C(932838457459459);

См. также Q_INT64_C(), quint64 и qlonglong.

qintptr

Целочисленный тип для представления указателей в виде целого со знаком (полезно для хеширования и т. д.).

Тип-синоним для qint32 или qint64. Этот тип гарантированно имеет такой же размер, как и указатель, на всех платформах, поддерживаемых Qt. В системе с 32-разрядными указателями qintptr — это тип-синоним для qint32; в системе с 64-разрядными указателями qintptr — это тип-синоним для qint64.

Обратите внимание, что qintptr имеет знак. Используйте quintptr для беззнаковых значений.

См. также qptrdiff, qint32 и qint64.

qlonglong

Тип-синоним для long long int (__int64 на Windows). Это то же самое, что и qint64.

См. также qulonglong и qint64.

qptrdiff

Целочисленный тип для представления различий указателей.

Тип-синоним для qint32 или qint64. Этот тип гарантированно имеет такой же размер, как и указатель, на всех платформах, поддерживаемых Qt. В системе с 32-разрядными указателями quintptr — это тип-синоним для quint32; в системе с 64-разрядными указателями quintptr — это тип-синоним для quint64.

Обратите внимание, что qptrdiff имеет знак. Используйте quintptr для беззнаковых значений.

См. также quintptr, qint32 и qint64.

qreal

Тип-синоним для double за исключением случаев, когда Qt сконфигурирован с опцией -qreal float.

[alias, since 5.10] qsizetype

Целочисленный тип, предоставляющий Posix' ssize_t для всех платформ.

Этот тип гарантированно имеет такой же размер, как и size_t на всех платформах, поддерживаемых Qt.

Обратите внимание, что qsizetype имеет знак. Используйте size_t для беззнаковых значений.

Этот typedef был введён в Qt 5.10.

См. также qptrdiff.

quint8

Тип-синоним для unsigned char. Этот тип гарантированно имеет 8 бит на всех платформах, поддерживаемых Qt.

quint16

Тип-синоним для unsigned short. Этот тип гарантированно имеет 16 бит на всех платформах, поддерживаемых Qt.

quint32

Тип-синоним для unsigned int. Этот тип гарантированно имеет 32 бита на всех платформах, поддерживаемых Qt.

quint64

Тип-синоним для unsigned long long int (unsigned __int64 на Windows). Этот тип гарантированно имеет 64 бита на всех платформах, поддерживаемых Qt.

Литералы этого типа можно создавать с помощью макроса Q_UINT64_C():

quint64 value = Q_UINT64_C(932838457459459);

См. также Q_UINT64_C(), qint64 и qulonglong.

quintptr

Целочисленный тип для представления указателей в виде беззнакового целого числа (полезно для хеширования и т. д.).

Тип-псевдоним для quint32 или quint64. Этот тип гарантированно имеет такой же размер, как указатель на всех платформах, поддерживаемых Qt. На системе с 32-битными указателями quintptr является псевдонимом для quint32; на системе с 64-битными указателями quintptr является псевдонимом для quint64.

Обратите внимание, что quintptr является беззнаковым. Для знаковых значений используйте qptrdiff.

См. также qptrdiff, quint32 и quint64.

qulonglong

Тип-псевдоним для unsigned long long int (unsigned __int64 в Windows). Это то же самое, что quint64.

См. также quint64 и qlonglong.

uchar

Удобный тип-псевдоним для unsigned char.

uint

Удобный тип-псевдоним для unsigned int.

ulong

Удобный тип-псевдоним для unsigned long.

ushort

Удобный тип-псевдоним для unsigned short.

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

int qFpClassify(double val)

int qFpClassify(float val)

Классифицирует значение с плавающей точкой.

Значения возврата определены в <cmath>: возвращает одно из следующих, определяемое классом с плавающей точкой val:

  • FP_NAN не число
  • FP_INFINITE бесконечности (положительные или отрицательные)
  • FP_ZERO ноль (положительный или отрицательный)
  • FP_NORMAL конечное число с полным мантиссой
  • FP_SUBNORMAL конечное число с уменьшенной мантиссой

QString qEnvironmentVariable(const char *varName)

QString qEnvironmentVariable(const char *varName, const QString &defaultValue)

Эти функции возвращают значение переменной окружения varName в виде QString. Если переменная varName не найдена в окружении и defaultValue задана, возвращается defaultValue. В противном случае возвращается QString().

Функции Qt для работы с переменными окружения потокобезопасны, но это требует, чтобы эквивалентные функции C-библиотеки, такие как getenv и putenv, не вызывались напрямую.

Следующая таблица описывает, как выбрать между qgetenv() и qEnvironmentVariable():

Условие Рекомендация
Переменная содержит пути к файлам или текст пользователя qEnvironmentVariable()
Код, специфичный для Windows qEnvironmentVariable()
Код, специфичный для Unix, целевая переменная не QString и/или используется для взаимодействия с API, не связанными с Qt qgetenv()
Целевая переменная является QString qEnvironmentVariable()
Целевая переменная является QByteArray или std::string qgetenv()

Примечание: в системах Unix эта функция может привести к потере данных, если исходная строка содержит произвольные двоичные данные, которые не могут быть декодированы кодеком локали. В этом случае используйте qgetenv(). В Windows эта функция без потерь.

Примечание: имя переменной varName должно содержать только символы US-ASCII.

Функция была представлена в Qt 5.10.

См. также qputenv(), qgetenv(), qEnvironmentVariableIsSet() и qEnvironmentVariableIsEmpty().

template <typename T> T qAbs(const T &t)

Сравнивает t с 0 типа T и возвращает абсолютное значение. Таким образом, если T - double, то t сравнивается с (double) 0.

Пример:

int absoluteValue;
int myValue = -4;

absoluteValue = qAbs(myValue);
// absoluteValue == 4

[since 5.7] template <typename T> typename std::add_const<T>::type &qAsConst(T &t)

Возвращает t, преобразованное в const T.

Эта функция является реализацией Qt функции C++17 std::as_const(), функции преобразования, аналогичной std::move(). Но в то время как std::move() преобразует lvalues в rvalues, эта функция преобразует lvalues, не являющиеся константами, в lvalues, являющиеся константами. Как и std::as_const(), она не работает с rvalues, потому что её нельзя эффективно реализовать для rvalues без оставления висячих ссылок.

Основное применение в Qt - предотвращение отсоединения неявно-разделяемых контейнеров Qt:

    QString s = ...;
    for (QChar ch : s) // detaches 's' (performs a deep-copy if 's' was shared)
        process(ch);
    for (QChar ch : qAsConst(s)) // ok, no detach attempt
        process(ch);

Конечно, в этом случае вы могли бы (и, вероятно, должны) объявить s как const с самого начала:

    const QString s = ...;
    for (QChar ch : s) // ok, no detach attempt on const objects
        process(ch);

но часто это нелегко осуществить.

Важно отметить, что qAsConst() не копирует свой аргумент, она просто выполняет const_cast<const T&>(t). Это также причина, по которой она спроектирована так, чтобы не работать с rvalues: возвращаемая ссылка слишком быстро станет устаревшей. Итак, хотя это работает (но отсоединяет возвращаемый объект):

    for (QChar ch : funcReturningQString())
        process(ch); // OK, the returned object is kept alive for the loop's duration

а вот это - нет:

    for (QChar ch : qAsConst(funcReturningQString()))
        process(ch); // ERROR: ch is copied from deleted memory

Чтобы предотвратить компиляцию этой конструкции (и сбой во время выполнения), qAsConst() имеет вторую, удалённую, перегрузку, которая связывается с rvalues.

Функция была представлена в Qt 5.7.

[since 5.7] template <typename T> void qAsConst(const T &&t)

Это перегруженная функция.

Эта перегрузка удалена для предотвращения висячей ссылки в коде, подобном

    for (QChar ch : qAsConst(funcReturningQString()))
        process(ch); // ERROR: ch is copied from deleted memory

Функция была представлена в Qt 5.7.

template <typename T> const T &qBound(const T &min, const T &val, const T &max)

Возвращает val, ограниченное min и max. Это эквивалентно qMax(min, qMin(val, max)).

Пример:

int myValue = 10;
int minValue = 2;
int maxValue = 6;

int boundedValue = qBound(minValue, myValue, maxValue);
// boundedValue == 6

См. также qMin() и qMax().

[since 5.7] template <typename T> auto qConstOverload(T memberFunctionPointer)

Возвращает указатель memberFunctionPointer на постоянную (константную) функцию-член:

    struct Foo {
        void overloadedFunction(int, const QString &);
        void overloadedFunction(int, const QString &) const;
    };
    ... qConstOverload<int, const QString &>(&Foo::overloadedFunction)
    ... qNonConstOverload<int, const QString &>(&Foo::overloadedFunction)

Функция была представлена в Qt 5.7.

См. также qOverload, qNonConstOverload и Различия между основанными на строках и функциональных подключениях.

QString qEnvironmentVariable(const char *varName)

QString qEnvironmentVariable(const char *varName, const QString &defaultValue)

[since 5.5] int qEnvironmentVariableIntValue(const char *varName, bool *ok = nullptr)

Возвращает числовое значение переменной окружения varName. Если ok не равен null, устанавливает *ok в true или false в зависимости от успешности преобразования.

Эквивалентно

    qgetenv(varName).toInt(ok, 0)

за исключением того, что это намного быстрее и не может выбрасывать исключения.

Примечание: существует ограничение на длину значения, достаточное для всех допустимых значений int, не считая ведущих нулей или пробелов. Значения, которые слишком длинные, будут либо усечены, либо эта функция установит ok в false.

Функция была представлена в Qt 5.5.

См. также qgetenv(), qEnvironmentVariable() и qEnvironmentVariableIsSet().

[since 5.1] bool qEnvironmentVariableIsEmpty(const char *varName)

Возвращает значение true, если переменная окружения varName пуста.

Эквивалентно

    qgetenv(varName).isEmpty()

за исключением того, что она потенциально намного быстрее и не может выбрасывать исключения.

Функция была представлена в Qt 5.1.

См. также qgetenv(), qEnvironmentVariable() и qEnvironmentVariableIsSet().

[since 5.1] bool qEnvironmentVariableIsSet(const char *varName)

Возвращает значение true, если переменная окружения varName установлена.

Эквивалентно

    !qgetenv(varName).isNull()

за исключением того, что она потенциально намного быстрее и не может выбрасывать исключения.

Функция была представлена в Qt 5.1.

См. также qgetenv(), qEnvironmentVariable(), и qEnvironmentVariableIsEmpty().

[since 5.14] template <typename T, typename U> T qExchange(T &obj, U &&newValue)

Заменяет значение obj на newValue и возвращает старое значение obj.

Это реализация Qt функции std::exchange(). Она отличается от std::exchange() только тем, что она constexpr уже включена в C++14 и доступна во всех поддерживаемых компиляторах.

Вот как использовать qExchange() для реализации move-конструкторов:

MyClass(MyClass &&other)
  : m_pointer{qExchange(other.m_pointer, nullptr)},
    m_int{qExchange(other.m_int, 0)},
    m_vector{std::move(other.m_vector)},
    ...

Для членов класса-типа мы можем использовать std::move(), так как их move-конструктор сделает всё правильно. Но для скалярных типов, таких как сырые указатели или целые типы, move эквивалентен copy, что, особенно для указателей, не является ожидаемым результатом. Поэтому мы не можем использовать std::move() для таких типов, но мы можем использовать std::exchange()/qExchange(), чтобы убедиться, что член исходного объекта уже сброшен к моменту инициализации нашего следующего члена данных, что может быть полезно, если конструктор завершится с исключением.

Вот как использовать qExchange() для написания цикла, потребляющего коллекцию, по которой он итерируется:

for (auto &e : qExchange(collection, {})
    doSomethingWith(e);

Что эквивалентно следующему, гораздо более объёмному коду:

{
    auto tmp = std::move(collection);
    collection = {};                    // or collection.clear()
    for (auto &e : tmp)
        doSomethingWith(e);
}                                       // destroys 'tmp'

Это абсолютно безопасно, так как цикл for сохраняет результат qExchange() живым до тех пор, пока цикл выполняется, что позволяет избежать объявления временной переменной. Однако следует помнить, что qExchange() возвращает не-const объект, поэтому контейнеры Qt могут отсоединиться.

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

[since 5.2] quint32 qFloatDistance(float a, float b)

Возвращает количество представимых чисел с плавающей точкой между a и b.

Эта функция предоставляет альтернативный способ приближённого сравнения чисел с плавающей точкой, аналогичный qFuzzyCompare(). Однако она возвращает расстояние между двумя числами, что даёт вызывающей стороне возможность выбрать допустимую ошибку. Ошибки относительны, поэтому, например, расстояние между 1.0E-5 и 1.00001E-5 будет 110, а расстояние между 1.0E36 и 1.00001E36 будет 127.

Эта функция полезна, если сравнение чисел с плавающей точкой требует определённой точности. Поэтому, если a и b равны, она вернёт 0. Максимальное значение, которое она вернёт для чисел с плавающей точкой 32-битной точности, составляет 4 278 190 078. Это расстояние между -FLT_MAX и +FLT_MAX.

Функция не даёт осмысленных результатов, если любой из аргументов Infinite или NaN. Проверить это можно, вызвав qIsFinite().

Значение возврата можно рассматривать как «ошибку», поэтому, например, если вам нужно сравнить два 32-битных числа с плавающей точкой и вам нужна приблизительная точность 24 бита, вы можете использовать эту функцию следующим образом:

    if (qFloatDistance(a, b) < (1 << 7)) {   // The last 7 bits are not
                                            // significant
        // precise enough
    }

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

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

[since 5.2] quint64 qFloatDistance(double a, double b)

Возвращает количество представимых чисел с плавающей точкой между a и b.

Эта функция выполняет ту же функцию, что и qFloatDistance(float, float), но возвращает расстояние между двумя double числами. Поскольку диапазон больше, чем для двух float чисел ([-DBL_MAX,DBL_MAX]), тип возвращаемого значения — quint64.

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

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

[since 5.4] QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, const QString &str)

Генерирует отформатированную строку из аргументов type, context, str.

qFormatLogMessage возвращает QString, отформатированный в соответствии с текущим шаблоном сообщений. Его можно использовать пользовательскими обработчиками сообщений для форматирования вывода аналогично поведению стандартного обработчика Qt.

Функция потокобезопасна.

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

См. также qInstallMessageHandler() и qSetMessagePattern().

int qFpClassify(double val)

int qFpClassify(float val)

bool qFuzzyCompare(double p1, double p2)

Сравнивает значения с плавающей точкой p1 и p2 и возвращает true если они считаются равными, иначе false.

Обратите внимание, что сравнение значений, где либо p1, либо p2 равно 0.0, не сработает, также как и сравнение значений, где одно из значений NaN или бесконечность. Если одно из значений всегда 0.0, используйте qFuzzyIsNull вместо этого. Если одно из значений, вероятно, равно 0.0, одним из решений является добавление 1.0 к обоим значениям.

// Instead of comparing with 0.0
qFuzzyCompare(0.0, 1.0e-200); // This will return false
// Compare adding 1 to both values will fix the problem
qFuzzyCompare(1 + 0.0, 1 + 1.0e-200); // This will return true

Два числа сравниваются по-относительному, где точность выше, чем меньше числа.

Примечание: Эта функция потокобезопасна.

bool qFuzzyCompare(float p1, float p2)

Сравнивает значения с плавающей точкой p1 и p2 и возвращает true если они считаются равными, иначе false.

Два числа сравниваются по-относительному, где точность выше, чем меньше числа.

Примечание: Эта функция потокобезопасна.

bool qFuzzyIsNull(double d)

Возвращает true, если абсолютное значение d находится в пределах 0.000000000001 от 0.0.

Примечание: Эта функция потокобезопасна.

bool qFuzzyIsNull(float f)

Возвращает true, если абсолютное значение f находится в пределах 0.00001f от 0.0.

Примечание: Эта функция потокобезопасна.

double qInf()

Возвращает битовое представление бесконечного числа в виде double.

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

[since 5.0] QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)

Устанавливает обработчик сообщений Qt, который был определён ранее. Возвращает указатель на предыдущий обработчик сообщений.

Обработчик сообщений — это функция, которая выводит сообщения отладки, предупреждения, критические и фатальные сообщения об ошибках. Библиотека Qt (режим отладки) содержит сотни предупреждений, которые выводятся при возникновении внутренних ошибок (обычно некорректные аргументы функций). Библиотека Qt в режиме релиза также содержит такие предупреждения, если QT_NO_WARNING_OUTPUT и/или QT_NO_DEBUG_OUTPUT не были установлены при компиляции. Если вы реализуете свой собственный обработчик сообщений, вы получаете полный контроль над этими сообщениями.

Стандартный обработчик сообщений выводит сообщение в стандартный вывод под X11 или в отладчик под Windows. Если это фатальное сообщение, приложение немедленно завершается.

Может быть определён только один обработчик сообщений, так как это обычно делается на уровне приложения для управления выводом сообщений отладки.

Для восстановления стандартного обработчика сообщений вызовите qInstallMessageHandler(0).

Пример:

#include <qapplication.h>
#include <stdio.h>
#include <stdlib.h>

void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QByteArray localMsg = msg.toLocal8Bit();
    const char *file = context.file ? context.file : "";
    const char *function = context.function ? context.function : "";
    switch (type) {
    case QtDebugMsg:
        fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
        break;
    case QtInfoMsg:
        fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
        break;
    case QtWarningMsg:
        fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
        break;
    case QtCriticalMsg:
        fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
        break;
    case QtFatalMsg:
        fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
        break;
    }
}

int main(int argc, char **argv)
{
    qInstallMessageHandler(myMessageOutput);
    QApplication app(argc, argv);
    ...
    return app.exec();
}

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

См. также QtMessageHandler, QtMsgType, qDebug(), qInfo(), qWarning(), qCritical(), qFatal(), и Методы отладки.

bool qIsFinite(double d)

Возвращает true если double d — конечное число.

bool qIsFinite(float f)

Возвращает true если float f — конечное число.

bool qIsInf(double d)

Возвращает true если double d эквивалентен бесконечности.

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

bool qIsInf(float f)

Возвращает true если float f эквивалентен бесконечности.

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

bool qIsNaN(double d)

Возвращает true если double d не является числом (NaN).

bool qIsNaN(float f)

Возвращает true если float f не является числом (NaN).

template <typename T> const T &qMax(const T &a, const T &b)

Возвращает максимальное значение из a и b.

Пример:

int myValue = 6;
int yourValue = 4;

int maxValue = qMax(myValue, yourValue);
// maxValue == myValue

См. также qMin() и qBound().

template <typename T> const T &qMin(const T &a, const T &b)

Возвращает минимальное из значений a и b.

Пример:

int myValue = 6;
int yourValue = 4;

int minValue = qMin(myValue, yourValue);
// minValue == yourValue

См. также qMax() и qBound().

[since 5.7] template <typename T> auto qNonConstOverload(T memberFunctionPointer)

Возвращает указатель memberFunctionPointer на неконстантный член-функцию:

    struct Foo {
        void overloadedFunction(int, const QString &);
        void overloadedFunction(int, const QString &) const;
    };
    ... qConstOverload<int, const QString &>(&Foo::overloadedFunction)
    ... qNonConstOverload<int, const QString &>(&Foo::overloadedFunction)

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

См. также qOverload, qNonConstOverload и Различия между подключениями на основе строк и на основе функциональных объектов.

[since 5.7] template <typename T> auto qOverload(T functionPointer)

Возвращает указатель на перегруженную функцию. Шаблонный параметр — список типов аргументов функции. functionPointer — указатель на (член-)функцию:

    struct Foo {
        void overloadedFunction();
        void overloadedFunction(int, const QString &);
    };
    ... qOverload<>(&Foo::overloadedFunction)
    ... qOverload<int, const QString &>(&Foo::overloadedFunction)

Если член-функция также перегружена с помощью const, необходимо использовать qConstOverload и qNonConstOverload.

qOverload() требует поддержки C++14. В коде, поддерживающем только C++11, можно напрямую использовать вспомогательные классы QOverload, QConstOverload и QNonConstOverload:

    ... QOverload<>::of(&Foo::overloadedFunction)
    ... QOverload<int, const QString &>::of(&Foo::overloadedFunction)

Примечание: Qt определяет необходимую поддержку компилятора C++14, используя рекомендации по тестированию возможностей из постоянного документа комитета C++.

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

См. также qConstOverload(), qNonConstOverload() и Различия между подключениями на основе строк и на основе функциональных объектов.

double qQNaN()

Возвращает битовое представление тихой NaN в виде double.

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

qint64 qRound64(double d)

Округляет d до ближайшего 64-битного целого числа.

Округление происходит с учётом половины в сторону от нуля (например, 0.5 -> 1, -0.5 -> -1).

Пример:

double valueA = 42949672960.3;
double valueB = 42949672960.7;

qint64 roundedValueA = qRound64(valueA);
// roundedValueA = 42949672960
qint64 roundedValueB = qRound64(valueB);
// roundedValueB = 42949672961

qint64 qRound64(float d)

Округляет d до ближайшего 64-битного целого числа.

Округление происходит с учётом половины в сторону от нуля (например, 0.5f -> 1, -0.5f -> -1).

Пример:

float valueA = 42949672960.3;
float valueB = 42949672960.7;

qint64 roundedValueA = qRound64(valueA);
// roundedValueA = 42949672960
qint64 roundedValueB = qRound64(valueB);
// roundedValueB = 42949672961

int qRound(double d)

Округляет d до ближайшего целого числа.

Округление происходит с учётом половины в сторону от нуля (например, 0.5 -> 1, -0.5 -> -1).

Пример:

double valueA = 2.3;
double valueB = 2.7;

int roundedValueA = qRound(valueA);
// roundedValueA = 2
int roundedValueB = qRound(valueB);
// roundedValueB = 3

int qRound(float d)

Округляет d до ближайшего целого числа.

Округление происходит с учётом половины в сторону от нуля (например, 0.5f -> 1, -0.5f -> -1).

Пример:

float valueA = 2.3;
float valueB = 2.7;

int roundedValueA = qRound(valueA);
// roundedValueA = 2
int roundedValueB = qRound(valueB);
// roundedValueB = 3

double qSNaN()

Возвращает битовое представление сигнализирующей NaN в виде double.

[since 5.0] void qSetMessagePattern(const QString &pattern)

Изменяет вывод обработчика сообщений по умолчанию.

Позволяет настраивать вывод qDebug(), qInfo(), qWarning(), qCritical() и qFatal(). Также форматируется вывод категорий логирования qCDebug(), qCInfo(), qCWarning() и qCCritical().

Поддерживаются следующие плейсхолдеры:

Плейсхолдер Описание
%{appname} QCoreApplication::applicationName()
%{category} Категория логирования
%{file} Путь к исходному файлу
%{function} Функция
%{line} Строка в исходном файле
%{message} Само сообщение
%{pid} QCoreApplication::applicationPid()
%{threadid} Широко используемый идентификатор текущей нити (если доступен)
%{qthreadptr} Указатель на текущую QThread (результат QThread::currentThread())
%{type} "debug", "warning", "critical" или "fatal"
%{time process} время сообщения, в секундах с момента запуска процесса (ключевое слово "process" является литералом)
%{time boot} время сообщения, в секундах с момента загрузки системы, если это можно определить (ключевое слово "boot" является литералом). Если время с момента загрузки получить не удалось, вывод не определен (см. QElapsedTimer::msecsSinceReference()).
%{time [format]} системное время возникновения сообщения, отформатированное с помощью format в QDateTime::toString(). Если формат не указан, используется формат Qt::ISODate.
%{backtrace [depth=N] [separator="..."]} стек вызовов с количеством кадров, указанным необязательным параметром depth (по умолчанию 5) и разделителем separator (по умолчанию "|"). Этот расширение доступно только на некоторых платформах (в настоящее время только платформах, использующих glibc). Имена известных только для экспортированных функций. Если вы хотите увидеть имя каждой функции в вашем приложении, используйте QMAKE_LFLAGS += -rdynamic. При чтении стеков вызовов следует учитывать, что кадры могут отсутствовать из-за встраивания или оптимизации хвостового вызова.

Также можно использовать условные выражения для типа сообщения с помощью %{if-debug}, %{if-info} %{if-warning}, %{if-critical} или %{if-fatal}, за которым следует %{endif}. Содержимое %{if-*} и %{endif} будет выведено только если тип совпадает.

Наконец, текст внутри %{if-category} ... %{endif} выводится только если категория не является по умолчанию.

Пример:

    QT_MESSAGE_PATTERN="[%{time yyyyMMdd h:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}"

По умолчанию pattern — "%{if-category}%{category}: %{endif}%{message}".

pattern также можно изменить во время выполнения, установив переменную среды QT_MESSAGE_PATTERN; если вызывается qSetMessagePattern() и установлена QT_MESSAGE_PATTERN, приоритет имеет переменная среды.

Примечание: шаблон сообщения применяется только к неструктурированному логированию, такому как вывод по умолчанию stderr. Структурированное логирование, такое как systemd, записывает сообщение как есть, вместе со всей доступной структурированной информацией.

Пользовательские обработчики сообщений могут использовать qFormatLogMessage(), чтобы учесть pattern.

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

См. также qInstallMessageHandler(), Техники отладки и QLoggingCategory.

const char *qVersion()

Возвращает строковое представление версии Qt во время выполнения (например, "4.1.2"). Может отличаться от версии, с которой было скомпилировано приложение.

См. также QT_VERSION_STR и QLibraryInfo::version().

template <typename T> T *q_check_ptr(T *p)

Использует Q_CHECK_PTR для p, затем возвращает p.

Это можно использовать как встроенную версию Q_CHECK_PTR.

QByteArray qgetenv(const char *varName)

Возвращает значение переменной окружения с именем varName как QByteArray. Если переменная с таким именем не найдена, функция возвращает QByteArray по умолчанию.

Функции Qt для работы с переменными окружения потокобезопасны, но это требует, чтобы эквивалентные функции C-библиотеки, такие как getenv и putenv, не вызывались напрямую.

Для преобразования данных в QString используйте QString::fromLocal8Bit().

Примечание: в настольных приложениях Windows, qgetenv() может привести к потере данных, если исходная строка содержит символы Юникода, не представленные в кодировке ANSI. Используйте qEnvironmentVariable() вместо этого. В Unix-системах эта функция без потерь.

Примечание: Эта функция потокобезопасна.

См. также qputenv(), qEnvironmentVariable(), qEnvironmentVariableIsSet(), и qEnvironmentVariableIsEmpty().

bool qputenv(const char *varName, const QByteArray &value)

Эта функция устанавливает значение переменной окружения с именем varName. Она создаст переменную, если она не существует. Возвращает 0, если переменная не могла быть установлена.

Вызов qputenv со значением пустой строки удаляет переменную среды в Windows и устанавливает её (но пустой) в Unix. Для полностью переносимого поведения используйте qunsetenv().

Примечание: qputenv() была введена, потому что putenv() из стандартной C библиотеки была устаревшей в VC2005 (и более поздних версиях). qputenv() использует заменяющую функцию в VC и вызывает стандартную реализацию C библиотеки на всех других платформах.

См. также qgetenv() и qEnvironmentVariable().

QString qtTrId(const char *id, int n = -1)

Функция qtTrId находит и возвращает переведённую строку.

Возвращает переведённую строку, идентифицированную по id. Если соответствующая строка не найдена, возвращается сам идентификатор. Это не должно происходить в нормальных условиях.

Если n >= 0, все вхождения %n в результирующей строке заменяются десятичным представлением n. Кроме того, в зависимости от значения n, текст перевода может изменяться.

Метаданные и комментарии могут быть переданы, как описано для QObject::tr(). Кроме того, возможно предоставить шаблон исходной строки, как в этом примере:

//% <C string>

или

\begincomment% <C string> \endcomment

Пример:

    //% "%n fooish bar(s) found.\n"
    //% "Do you want to continue?"
    QString text = qtTrId("qtn_foo_bar", n);

Для создания файлов QM, пригодных для использования с этой функцией, необходимо передать параметр -idbased в инструмент lrelease.

Предупреждение: Этот метод является реентерабельным только в том случае, если все переводчики установлены до вызова этого метода. Установка или удаление переводчиков во время выполнения переводов не поддерживается. Это, вероятно, приведёт к сбоям или другому нежелательному поведению.

Примечание: Эта функция реентерабельна.

См. также QObject::tr(), QCoreApplication::translate(), и Международная поддержка в Qt.

[since 5.1] bool qunsetenv(const char *varName)

Эта функция удаляет переменную varName из среды.

Возвращает true при успешном выполнении.

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

См. также qputenv(), qgetenv(), и qEnvironmentVariable().

Документация макросов

QT_DEPRECATED_WARNINGS

Начиная с Qt 5.13, этот макрос не имеет эффекта. В Qt 5.12 и ранее, если этот макрос определён, компилятор будет генерировать предупреждения, если используется любой API, объявленный устаревшим Qt.

См. также QT_DISABLE_DEPRECATED_BEFORE и QT_NO_DEPRECATED_WARNINGS.

QT_DISABLE_DEPRECATED_BEFORE

Этот макрос можно определить в файле проекта, чтобы отключить функции, устаревшие в определённой версии Qt или любой более ранней версии. Значение по умолчанию — 5.0, что означает, что функции, устаревшие в или до Qt 5.0, не будут включены.

Например, при использовании будущей версии Qt 5, установите QT_DISABLE_DEPRECATED_BEFORE=0x050100 для отключения функций, устаревших в Qt 5.1 и ранее. В любой версии установите QT_DISABLE_DEPRECATED_BEFORE=0x000000 для включения всех функций, включая устаревшие в Qt 5.0.

См. также QT_DEPRECATED_WARNINGS.

[since 5.13] QT_NO_DEPRECATED_WARNINGS

Этот макрос может использоваться для подавления предупреждений об устаревании, которые в противном случае генерируются при использовании устаревших API.

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

См. также QT_DISABLE_DEPRECATED_BEFORE.

QT_POINTER_SIZE

Расширяется до размера указателя в байтах (4 или 8). Это эквивалентно sizeof(void *) , но может использоваться в директиве препроцессора.

QT_REQUIRE_VERSION(int argc, char **argv, const char *version)

Этот макрос можно использовать, чтобы убедиться, что приложение запускается с достаточно новой версией Qt. Это особенно полезно, если ваше приложение зависит от конкретного исправления ошибки, введённого в релизе исправления ошибок (например, 4.0.2).

Параметры argc и argv являются параметрами main() функции argc и argv . Параметр version — это строковая литерал, которая указывает, какая версия Qt требуется приложению (например, "4.0.2").

Пример:

#include <QApplication>
#include <QMessageBox>

int main(int argc, char *argv[])
{
    QT_REQUIRE_VERSION(argc, argv, "4.0.2")

    QApplication app(argc, argv);
    ...
    return app.exec();
}

QT_TRANSLATE_NOOP3(context, sourceText, disambiguation)

Помечает кодированную в UTF-8 строковую литерал sourceText для отложенного перевода в заданном context с заданным disambiguation. context обычно является именем класса и также должен быть указан в виде строковой литерал. Строковая литерал disambiguation должна быть коротким семантическим тегом для различения в противном случае идентичных строк.

Макрос сообщает lupdate о сборе строки и расширяется до анонимной структуры двух строковых литералов, переданных в качестве sourceText и disambiguation.

Пример:

static { const char *source; const char *comment; } greeting_strings[] =
{
    QT_TRANSLATE_NOOP3("FriendlyConversation", "Hello",
                       "A really friendly hello"),
    QT_TRANSLATE_NOOP3("FriendlyConversation", "Goodbye",
                       "A really friendly goodbye")
};

QString FriendlyConversation::greeting(int type)
{
    return tr(greeting_strings[type].source,
              greeting_strings[type].comment);
}

QString global_greeting(int type)
{
    return qApp->translate("FriendlyConversation",
                           greeting_strings[type].source,
                           greeting_strings[type].comment);
}

См. также QT_TR_NOOP(), QT_TRANSLATE_NOOP() и Международная локализация с Qt.

QT_TRANSLATE_NOOP(context, sourceText)

Помечает кодированную в UTF-8 строковую литерал sourceText для отложенного перевода в заданном context. context обычно является именем класса и также должен быть указан в виде строковой литерал.

Макрос сообщает lupdate о сборе строки и расширяется до самой sourceText.

Пример:

static const char *greeting_strings[] = {
    QT_TRANSLATE_NOOP("FriendlyConversation", "Hello"),
    QT_TRANSLATE_NOOP("FriendlyConversation", "Goodbye")
};

QString FriendlyConversation::greeting(int type)
{
    return tr(greeting_strings[type]);
}

QString global_greeting(int type)
{
    return qApp->translate("FriendlyConversation",
                           greeting_strings[type]);
}

См. также QT_TR_NOOP(), QT_TRANSLATE_NOOP3() и Международная локализация с Qt.

[since 5.12] QT_TRANSLATE_N_NOOP3(context, sourceText, comment)

Помечает кодированную в UTF-8 строковую литерал sourceText для отложенного перевода, зависящего от числителя, в заданном context с заданным comment. context обычно является классом и также должен быть указан как строковая литерал. Строковая литерал comment должна быть коротким семантическим тегом для различения в противном случае идентичных строк.

Макрос сообщает lupdate о сборе строки и расширяется до анонимной структуры двух строковых литералов, переданных в качестве sourceText и comment.

Пример:

static { const char * const source; const char * const comment; } status_strings[] = {
    QT_TRANSLATE_N_NOOP3("Message Status", "Hello, you have %n message(s)",
                         "A login message status"),
    QT_TRANSLATE_N_NOOP3("Message status", "You have %n new message(s)",
                         "A new message query status")
};

QString FriendlyConversation::greeting(int type, int count)
{
    return tr(status_strings[type].source,
              status_strings[type].comment, count);
}

QString global_greeting(int type, int count)
{
    return qApp->translate("Message Status",
                           status_strings[type].source,
                           status_strings[type].comment,
                           count);
}

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

См. также QT_TR_NOOP(), QT_TRANSLATE_NOOP(), QT_TRANSLATE_NOOP3() и Международная локализация с Qt.

[since 5.12] QT_TRANSLATE_N_NOOP(context, sourceText)

Помечает кодированную в UTF-8 строковую литерал sourceText для отложенного перевода, зависящего от числителя, в заданном context. context обычно является именем класса и также должен быть указан в виде строковой литерал.

Макрос сообщает lupdate о сборе строки и расширяется до самой sourceText.

Пример:

static const char * const greeting_strings[] = {
    QT_TRANSLATE_N_NOOP("Welcome Msg", "Hello, you have %n message(s)"),
    QT_TRANSLATE_N_NOOP("Welcome Msg", "Hi, you have %n message(s)")
};

QString global_greeting(int type, int msgcnt)
{
    return translate("Welcome Msg", greeting_strings[type], nullptr, msgcnt);
}

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

См. также QT_TRANSLATE_NOOP(), QT_TRANSLATE_N_NOOP3() и Международная локализация с Qt.

QT_TRID_NOOP(id)

Макрос QT_TRID_NOOP помечает id для динамического перевода.

Единственная цель этого макроса — предоставить точку привязки для добавления метаданных к qtTrId().

Макрос расширяется до id.

Пример:

static const char * const ids[] = {
    //% "This is the first text."
    QT_TRID_NOOP("qtn_1st_text"),
    //% "This is the second text."
    QT_TRID_NOOP("qtn_2nd_text"),
    0
};

void TheClass::addLabels()
{
    for (int i = 0; ids[i]; ++i)
        new QLabel(qtTrId(ids[i]), this);
}

См. также qtTrId() и Международная локализация с Qt.

QT_TR_NOOP(sourceText)

Помечает кодированную в UTF-8 строковую литерал sourceText для отложенного перевода в текущем контексте (классе).

Макрос сообщает lupdate о сборе строки и расширяется до самой sourceText.

Пример:

QString FriendlyConversation::greeting(int type)
{
    static const char *greeting_strings[] = {
        QT_TR_NOOP("Hello"),
        QT_TR_NOOP("Goodbye")
    };
    return tr(greeting_strings[type]);
}

Макрос QT_TR_NOOP_UTF8() идентичен и устарел; это относится ко всем другим _UTF8 макросам.

См. также QT_TRANSLATE_NOOP() и Международная локализация с Qt.

[since 5.12] QT_TR_N_NOOP(sourceText)

Помечает кодированную в UTF-8 строковую литерал sourceText для отложенного перевода, зависящего от числителя, в текущем контексте (классе).

Макрос сообщает lupdate о сборе строки и расширяется до самой sourceText.

Макрос расширяется до sourceText.

Пример:

static const char * const StatusClass::status_strings[] = {
    QT_TR_N_NOOP("There are %n new message(s)"),
    QT_TR_N_NOOP("There are %n total message(s)")
};

QString StatusClass::status(int type, int count)
{
    return tr(status_strings[type], nullptr, count);
}

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

См. также QT_TR_NOOP и Международная локализация с Qt.

QT_VERSION

Этот макрос расширяется до числового значения вида 0xMMNNPP (MM = главная, NN = второстепенная, PP = патч), которое указывает номер версии Qt. Например, если вы компилируете своё приложение с Qt 4.1.2, макрос QT_VERSION будет расширяться до 0x040102.

Вы можете использовать QT_VERSION для использования последних функций Qt, где это возможно.

Пример:

#if QT_VERSION >= 0x040100
    QIcon icon = style()->standardIcon(QStyle::SP_TrashIcon);
#else
    QPixmap pixmap = style()->standardPixmap(QStyle::SP_TrashIcon);
    QIcon icon(pixmap);
#endif

См. также QT_VERSION_STR и qVersion().

QT_VERSION_CHECK

Преобразует главные, второстепенные и патч-номера версии в целое число, 0xMMNNPP (MM = главная, NN = второстепенная, PP = патч). Это можно сравнить с другим идентификатором версии, обработанным аналогичным образом.

Пример:

#include <QtGlobal>

#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
#include <QtWidgets>
#else
#include <QtGui>
#endif

См. также QT_VERSION.

QT_VERSION_STR

Этот макрос расширяется до строки, которая указывает номер версии Qt (например, "4.1.2"). Это версия, с которой компилируется приложение.

См. также qVersion() и QT_VERSION.

void Q_ASSERT(bool test)

Выводит сообщение об ошибке, содержащее имя файла исходного кода и номер строки, если test ложно.

Q_ASSERT() полезен для проверки предопределённых и постусловий во время разработки. Он ничего не делает, если QT_NO_DEBUG было определено во время компиляции.

Пример:

// File: div.cpp

#include <QtGlobal>

int divide(int a, int b)
{
    Q_ASSERT(b != 0);
    return a / b;
}

Если значение b равно нулю, оператор Q_ASSERT выведет следующее сообщение с помощью функции qFatal:

ASSERT: "b != 0" in file div.cpp, line 7

См. также Q_ASSERT_X(), qFatal() и Методы отладки.

void Q_ASSERT_X(bool test, const char *where, const char *what)

Выводит сообщение what вместе с местоположением where, именем файла исходного кода и номером строки, если test ложно.

Q_ASSERT_X полезен для проверки предопределённых и постусловий во время разработки. Он ничего не делает, если QT_NO_DEBUG было определено во время компиляции.

Пример:

// File: div.cpp

#include <QtGlobal>

int divide(int a, int b)
{
    Q_ASSERT_X(b != 0, "divide", "division by zero");
    return a / b;
}

Если значение b равно нулю, оператор Q_ASSERT_X выведет следующее сообщение с помощью функции qFatal:

ASSERT failure in divide: "division by zero", file div.cpp, line 7

См. также Q_ASSERT(), qFatal() и Методы отладки.

[since 5.0] void Q_ASSUME(bool expr)

Принуждает компилятор предположить, что expr истинно. Этот макрос полезен для улучшения генерации кода, предоставляя компилятору подсказки о условиях, о которых он в противном случае не знает. Однако нет гарантии, что компилятор на самом деле будет использовать эти подсказки.

Этот макрос можно рассматривать как «более лёгкую» версию Q_ASSERT(). В то время как Q_ASSERT завершит выполнение программы, если условие ложно, Q_ASSUME сообщит компилятору не генерировать код для этих условий. Поэтому важно, чтобы предположения всегда были истинными, в противном случае могут возникнуть неопределённые последствия.

Если expr является постоянно false условием, Q_ASSUME сообщит компилятору, что текущее выполнение кода недостижимо. То есть, Q_ASSUME(false) эквивалентно Q_UNREACHABLE().

В отладочных сборках условие проверяется с помощью утверждения для облегчения отладки.

Примечание: Q_LIKELY() сообщает компилятору, что выражение вероятно, но не единственно возможно. Q_ASSUME сообщает компилятору, что это единственно возможное.

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

См. также Q_ASSERT(), Q_UNREACHABLE() и Q_LIKELY().

Q_BIG_ENDIAN

Эта макрос представляет значение, которое можно сравнить с макросом Q_BYTE_ORDER для определения порядка байтов вашей системы. В системе с порядком байтов big-endian самый значимый байт хранится по самому низкому адресу. Остальные байты следуют в порядке убывания значимости.

#if Q_BYTE_ORDER == Q_BIG_ENDIAN
...
#endif

См. также Q_BYTE_ORDER и Q_LITTLE_ENDIAN.

Q_BYTE_ORDER

Этот макрос можно использовать для определения порядка байтов, используемого вашей системой для хранения данных в памяти. То есть, является ли ваша система little-endian или big-endian. Он устанавливается Qt в одно из макросов Q_LITTLE_ENDIAN или Q_BIG_ENDIAN. Обычно вам не нужно беспокоиться о порядке байтов, но вы можете, например, если вам нужно знать, какой байт целого числа или символа UTF-16 хранится по самому низкому адресу. Порядок байтов важен в сетях, где компьютеры с разными значениями Q_BYTE_ORDER должны передавать данные друг другу.

Используйте этот макрос, как в следующих примерах.

#if Q_BYTE_ORDER == Q_BIG_ENDIAN
...
#endif

or

#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
...
#endif

См. также Q_BIG_ENDIAN и Q_LITTLE_ENDIAN.

Q_CC_BOR

Определено, если приложение скомпилировано с использованием Borland/Turbo C++.

Q_CC_CDS

Определено, если приложение скомпилировано с использованием Reliant C++.

Q_CC_CLANG

Определено, если приложение скомпилировано с использованием Clang.

Q_CC_COMEAU

Определено, если приложение скомпилировано с использованием Comeau C++.

Q_CC_DEC

Определено, если приложение скомпилировано с использованием DEC C++.

Q_CC_EDG

Определено, если приложение скомпилировано с использованием Edison Design Group C++.

Q_CC_GHS

Определено, если приложение скомпилировано с использованием Green Hills Optimizing C++ Compilers.

Q_CC_GNU

Определено, если приложение скомпилировано с использованием GNU C++.

Q_CC_HIGHC

Определено, если приложение скомпилировано с использованием MetaWare High C/C++.

Q_CC_HPACC

Определено, если приложение скомпилировано с использованием HP aC++.

Q_CC_INTEL

Определено, если приложение скомпилировано с использованием Intel C++ для Linux, Intel C++ для Windows.

Q_CC_KAI

Определено, если приложение скомпилировано с использованием KAI C++.

Q_CC_MIPS

Определено, если приложение скомпилировано с использованием MIPSpro C++.

Q_CC_MSVC

Определено, если приложение скомпилировано с использованием Microsoft Visual C/C++, Intel C++ для Windows.

Q_CC_OC

Определено, если приложение скомпилировано с использованием CenterLine C++.

Q_CC_PGI

Определено, если приложение скомпилировано с использованием Portland Group C++.

Q_CC_SUN

Определено, если приложение скомпилировано с использованием Forte Developer или Sun Studio C++.

Q_CC_SYM

Определено, если приложение скомпилировано с использованием Digital Mars C/C++ (ранее Symantec C++).

Q_CC_USLC

Определено, если приложение скомпилировано с использованием SCO OUDK и UDK.

Q_CC_WAT

Определено, если приложение скомпилировано с использованием Watcom C++.

void Q_CHECK_PTR(void *pointer)

Если pointer nullptr, выводит сообщение, содержащее имя файла исходного кода и номер строки, сообщая о том, что программа закончилась из-за недостатка памяти, и завершает выполнение программы. Бросает std::bad_alloc вместо этого, если включены исключения.

Q_CHECK_PTR ничего не делает, если QT_NO_DEBUG и QT_NO_EXCEPTIONS были определены во время компиляции. Поэтому вы не должны использовать Q_CHECK_PTR для проверки успешных выделений памяти, потому что проверка будет отключена в некоторых случаях.

Пример:

int *a;

Q_CHECK_PTR(a = new int[80]);   // WRONG!

a = new (nothrow) int[80];      // Right
Q_CHECK_PTR(a);

См. также qWarning() и Методы отладки.

Q_DECLARE_TYPEINFO(Type, Flags)

Вы можете использовать этот макрос, чтобы указать информацию о пользовательском типе Type. С точной информацией о типе контейнеры Qt могут выбрать соответствующие методы хранения и алгоритмы.

Flags может быть одним из следующих:

  • Q_PRIMITIVE_TYPE указывает, что Type — тип POD (простой старый тип данных) без конструктора или деструктора, и для которого memcpy() создаёт действительную независимую копию объекта.
  • Q_RELOCATABLE_TYPE указывает, что Type имеет конструктор и/или деструктор, но может быть перемещён в памяти с помощью memcpy().
  • Q_MOVABLE_TYPE то же самое, что и Q_RELOCATABLE_TYPE. В новом коде предпочтительно использовать Q_RELOCATABLE_TYPE. Примечание: несмотря на название, это не имеет отношения к перемещающим конструкторам или C++ семантике перемещения.
  • Q_COMPLEX_TYPE (по умолчанию) указывает, что Type имеет конструкторы и/или деструктор и что он не может быть перемещён в памяти.

Пример "примитивного" типа:

struct Point2D
{
    int x;
    int y;
};

Q_DECLARE_TYPEINFO(Point2D, Q_PRIMITIVE_TYPE);

Пример не-POD "примитивного" типа — QUuid: Хотя у QUuid есть конструкторы (и, следовательно, он не POD), каждый битовый шаблон всё ещё представляет собой действительный объект, и memcpy() может использоваться для создания действительной независимой копии объекта QUuid.

Пример перемещаемого типа:

class Point2D
{
public:
    Point2D() { data = new int[2]; }
    Point2D(const Point2D &other) { ... }
    ~Point2D() { delete[] data; }

    Point2D &operator=(const Point2D &other) { ... }

    int x() const { return data[0]; }
    int y() const { return data[1]; }

private:
    int *data;
};

Q_DECLARE_TYPEINFO(Point2D, Q_RELOCATABLE_TYPE);

Qt попытается определить класс типа, используя std::is_trivial_v<T> для идентификации примитивных типов, и он потребует как std::is_trivially_copyable_v<T>, так и std::is_trivially_destructible_v<T> для идентификации перемещаемых типов. Используйте этот макрос для настройки поведения. Например, многие типы были бы кандидатами на Q_RELOCATABLE_TYPE, несмотря на то, что они не являются тривиально копируемыми.

Q_DECL_CONSTEXPR

Этот макрос можно использовать для объявления переменной, которая должна быть построена во время компиляции, или встроенной функции, которая может быть вычислена во время компиляции.

Он расширяется до "constexpr", если ваш компилятор поддерживает эту ключевое слово C++11, или до ничего в противном случае.

См. также Q_DECL_RELAXED_CONSTEXPR.

Q_DECL_EXPORT

Этот макрос помечает символ для экспорта в динамическую библиотеку (см. Создание динамических библиотек).

См. также Q_DECL_IMPORT.

Q_DECL_IMPORT

Этот макрос объявляет символ, который должен быть импортирован из динамической библиотеки (см. Создание динамических библиотек).

См. также Q_DECL_EXPORT.

[since 5.0] Q_DECL_NOEXCEPT

Этот макрос помечает функцию как никогда не выбрасывающую исключения. Если функция всё же выбрасывает исключение, поведение определено: вызывается std::terminate().

Макрос расширяется до C++11 noexcept, если доступно, или до ничего в противном случае.

Если вам нужен операторный вариант C++11 noexcept, используйте Q_DECL_NOEXCEPT_EXPR(x).

Если вам не нужны семантика C++11 noexcept, например, потому что ваша функция не может вызывать исключения, не используйте этот макрос, используйте Q_DECL_NOTHROW вместо этого.

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

См. также Q_DECL_NOTHROW и Q_DECL_NOEXCEPT_EXPR().

[since 5.0] Q_DECL_NOEXCEPT_EXPR(x)

Этот макрос помечает функцию как не выбрасывающую исключение, если x true. Если функция всё же выбрасывает исключение, поведение определено: вызывается std::terminate().

Макрос расширяется до C++11 noexcept(x), если доступно, или до ничего в противном случае.

Если вам нужен вариант C++11 noexcept, всегда истинно, используйте Q_DECL_NOEXCEPT.

Если вам не нужны семантика C++11 noexcept, например, потому что ваша функция не может вызывать исключения, не используйте этот макрос, используйте Q_DECL_NOTHROW вместо этого.

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

См. также Q_DECL_NOTHROW и Q_DECL_NOEXCEPT.

[since 5.0] Q_DECL_NOTHROW

Этот макрос помечает функцию как никогда не выбрасывающую исключение ни при каких обстоятельствах. Если функция всё же выбрасывает исключение, поведение не определено.

Макрос расширяется либо до "throw()", если это имеет какое-то преимущество для компилятора, либо до C++11 noexcept, если доступно, или до ничего в противном случае.

Если вам нужны семантика C++11 noexcept, не используйте этот макрос, используйте Q_DECL_NOEXCEPT/Q_DECL_NOEXCEPT_EXPR вместо этого.

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

См. также Q_DECL_NOEXCEPT и Q_DECL_NOEXCEPT_EXPR().

Q_DECL_RELAXED_CONSTEXPR

Этот макрос можно использовать для объявления встроенной функции, которая может вычисляться во время компиляции в соответствии с ослабленными правилами из C++14.

Он расширяется до «constexpr», если ваш компилятор поддерживает ослабленные константные выражения C++14, или до ничего в противном случае.

См. также Q_DECL_CONSTEXPR.

[since 5.8] void Q_FALLTHROUGH

Может использоваться в операторах switch в конце блока case, чтобы сообщить компилятору и другим разработчикам, что отсутствие оператора break намерено.

Это полезно, так как отсутствие оператора break часто является ошибкой, и некоторые компиляторы могут быть настроены на выброс предупреждений, когда он не найден.

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

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

Q_FOREACH(variable, container)

То же, что и foreach(variable, container).

Этот макрос доступен даже тогда, когда no_keywords указано с использованием .pro файла CONFIG переменной.

Примечание: Начиная с Qt 5.7, использование этого макроса не рекомендуется. Он будет удален в будущей версии Qt. Пожалуйста, используйте цикл range-for C++11, возможно, с qAsConst(), по мере необходимости.

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

Q_FOREVER

То же, что и forever.

Этот макрос доступен даже тогда, когда no_keywords указано с использованием .pro файла CONFIG переменной.

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

[since 5.2] Q_FORWARD_DECLARE_CF_TYPE(type)

Предварительно объявляет тип Core Foundation type. Это включает фактический тип и тип ссылки. Например, Q_FORWARD_DECLARE_CF_TYPE(CFString) объявляет __CFString и CFStringRef.

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

[since 5.2] Q_FORWARD_DECLARE_MUTABLE_CF_TYPE(type)

Предварительно объявляет изменяемый тип Core Foundation type. Это включает фактический тип и тип ссылки. Например, Q_FORWARD_DECLARE_MUTABLE_CF_TYPE(CFMutableString) объявляет __CFMutableString и CFMutableStringRef.

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

[since 5.2] Q_FORWARD_DECLARE_OBJC_CLASS(classname)

Предварительно объявляет класс Objective-C classname таким образом, что он может быть скомпилирован как Objective-C, так и C++.

Это предназначено в первую очередь для использования в заголовочных файлах, которые могут включаться как файлами исходного кода Objective-C, так и C++.

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

const char*Q_FUNC_INFO

Расширяется до строки, описывающей функцию, в которой находится макрос. Более конкретный вид этой строки зависит от компилятора. В GNU GCC это обычно сигнатура функции, а в других компиляторах это может быть номер строки и столбца.

Q_FUNC_INFO удобно использовать с qDebug(). Например, эта функция:

template<typename TInputType>
const TInputType &myMin(const TInputType &value1, const TInputType &value2)
{
    qDebug() << Q_FUNC_INFO << "was called with value1:" << value1 << "value2:" << value2;

    if(value1 < value2)
        return value1;
    else
        return value2;
}

при инициализации целым типом, с компилятором GCC будет выдавать:

const TInputType& myMin(const TInputType&, const TInputType&) [with TInputType = int] was called with value1: 3 value2: 4

Если этот макрос используется вне функции, поведение не определено.

qint64 Q_INT64_C(literal)

Оборачивает целое 64-битное число со знаком literal независимо от платформы.

Пример:

qint64 value = Q_INT64_C(932838457459459);

См. также qint64 и Q_UINT64_C().

Q_LIKELY(expr)

Подсказывает компилятору, что заключенное условие expr, вероятно, приведёт к значению true.

Использование этого макроса может помочь компилятору оптимизировать код.

Пример:

    // the condition inside the "if" will be successful most of the times
    for (int i = 1; i <= 365; i++) {
        if (Q_LIKELY(isWorkingDay(i))) {
            ...
        }
        ...
    }

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

Q_LITTLE_ENDIAN

Этот макрос представляет значение, которое можно сравнить с макросом Q_BYTE_ORDER, чтобы определить порядок байтов вашей системы. В системе little-endian наименее значимый байт хранится по наименьшему адресу. Другие байты следуют в порядке возрастания значащих разрядов.

#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
...
#endif

См. также Q_BYTE_ORDER и Q_BIG_ENDIAN.

Q_OS_AIX

Определён на AIX.

Q_OS_ANDROID

Определён на Android.

Q_OS_BSD4

Определён на любой системе BSD 4.4.

Q_OS_CYGWIN

Определён на Cygwin.

Q_OS_DARWIN

Определён на операционных системах на базе Darwin, таких как macOS, iOS, watchOS и tvOS.

Q_OS_FREEBSD

Определён на FreeBSD.

Q_OS_HPUX

Определён на HP-UX.

Q_OS_HURD

Определён на GNU Hurd.

Q_OS_IOS

Определён на iOS.

Q_OS_LINUX

Определён на Linux.

Q_OS_LYNX

Определён на LynxOS.

Q_OS_MAC

Устаревшее синоним для Q_OS_DARWIN. Не использовать.

Q_OS_MACOS

Определён на macOS.

Q_OS_NETBSD

Определён на NetBSD.

Q_OS_OPENBSD

Определён на OpenBSD.

Q_OS_OSX

Устаревшее синоним для Q_OS_MACOS. Не использовать.

Q_OS_QNX

Определён на QNX Neutrino.

Q_OS_SOLARIS

Определён на Sun Solaris.

Q_OS_TVOS

Определён на tvOS.

Q_OS_UNIX

Определён на любой UNIX-системе BSD/SYSV.

Q_OS_WASM

Определён на Web Assembly.

Q_OS_WATCHOS

Определён на watchOS.

Q_OS_WIN32

Определён на 32-разрядных и 64-разрядных версиях Windows.

Q_OS_WIN64

Определён на 64-разрядных версиях Windows.

Q_OS_WIN

Определён на всех поддерживаемых версиях Windows. То есть, если определён Q_OS_WIN32 или Q_OS_WIN64.

Q_OS_WINDOWS

Это синоним для Q_OS_WIN.

Q_PROCESSOR_X86

Определён, если приложение скомпилировано для процессоров x86. Qt в настоящее время поддерживает два варианта x86: Q_PROCESSOR_X86_32 и Q_PROCESSOR_X86_64.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_S390

Определён, если приложение скомпилировано для процессоров S/390. Qt поддерживает один необязательный вариант S/390: Q_PROCESSOR_S390_X.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_ALPHA

Определён, если приложение скомпилировано для процессоров Alpha.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_ARM

Определён, если приложение скомпилировано для процессоров ARM. Qt в настоящее время поддерживает три необязательных варианта ARM: Q_PROCESSOR_ARM_V5, Q_PROCESSOR_ARM_V6 и Q_PROCESSOR_ARM_V7.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_ARM_V5

Определён, если приложение скомпилировано для процессоров ARMv5. Макрос Q_PROCESSOR_ARM также определён, когда определён Q_PROCESSOR_ARM_V5.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_ARM_V6

Определён, если приложение скомпилировано для процессоров ARMv6. Макросы Q_PROCESSOR_ARM и Q_PROCESSOR_ARM_V5 также определены, когда определён Q_PROCESSOR_ARM_V6.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_ARM_V7

Определён, если приложение скомпилировано для процессоров ARMv7. Макросы Q_PROCESSOR_ARM, Q_PROCESSOR_ARM_V5 и Q_PROCESSOR_ARM_V6 также определены, когда определён Q_PROCESSOR_ARM_V7.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_AVR32

Определён, если приложение скомпилировано для процессоров AVR32.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_BLACKFIN

Определён, если приложение скомпилировано для процессоров Blackfin.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_IA64

Определён, если приложение скомпилировано для процессоров IA-64. Это включает все процессоры Itanium и Itanium 2.

END_OF_DOCUMENT_MARKER

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_MIPS

Определяется, если приложение скомпилировано для процессоров MIPS. Qt в настоящее время поддерживает семь ревизий MIPS: Q_PROCESSOR_MIPS_I, Q_PROCESSOR_MIPS_II, Q_PROCESSOR_MIPS_III, Q_PROCESSOR_MIPS_IV, Q_PROCESSOR_MIPS_V, Q_PROCESSOR_MIPS_32 и Q_PROCESSOR_MIPS_64.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_MIPS_32

Определяется, если приложение скомпилировано для процессоров MIPS32. Макросы Q_PROCESSOR_MIPS, Q_PROCESSOR_MIPS_I и Q_PROCESSOR_MIPS_II также определены, когда определен Q_PROCESSOR_MIPS_32.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_MIPS_64

Определяется, если приложение скомпилировано для процессоров MIPS64. Макросы Q_PROCESSOR_MIPS, Q_PROCESSOR_MIPS_I, Q_PROCESSOR_MIPS_II, Q_PROCESSOR_MIPS_III, Q_PROCESSOR_MIPS_IV и Q_PROCESSOR_MIPS_V также определены, когда определен Q_PROCESSOR_MIPS_64.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_MIPS_I

Определяется, если приложение скомпилировано для процессоров MIPS-I. Макрос Q_PROCESSOR_MIPS также определён, когда определён Q_PROCESSOR_MIPS_I.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_MIPS_II

Определяется, если приложение скомпилировано для процессоров MIPS-II. Макросы Q_PROCESSOR_MIPS и Q_PROCESSOR_MIPS_I также определены, когда определён Q_PROCESSOR_MIPS_II.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_MIPS_III

Определяется, если приложение скомпилировано для процессоров MIPS-III. Макросы Q_PROCESSOR_MIPS, Q_PROCESSOR_MIPS_I и Q_PROCESSOR_MIPS_II также определены, когда определён Q_PROCESSOR_MIPS_III.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_MIPS_IV

Определяется, если приложение скомпилировано для процессоров MIPS-IV. Макросы Q_PROCESSOR_MIPS, Q_PROCESSOR_MIPS_I, Q_PROCESSOR_MIPS_II и Q_PROCESSOR_MIPS_III также определены, когда определён Q_PROCESSOR_MIPS_IV.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_MIPS_V

Определяется, если приложение скомпилировано для процессоров MIPS-V. Макросы Q_PROCESSOR_MIPS, Q_PROCESSOR_MIPS_I, Q_PROCESSOR_MIPS_II, Q_PROCESSOR_MIPS_III и Q_PROCESSOR_MIPS_IV также определены, когда определён Q_PROCESSOR_MIPS_V.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_POWER

Определяется, если приложение скомпилировано для процессоров POWER. Qt в настоящее время поддерживает два варианта Power: Q_PROCESSOR_POWER_32 и Q_PROCESSOR_POWER_64.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_POWER_32

Определяется, если приложение скомпилировано для 32-битных процессоров Power. Макрос Q_PROCESSOR_POWER также определён, когда определён Q_PROCESSOR_POWER_32.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_POWER_64

Определяется, если приложение скомпилировано для 64-битных процессоров Power. Макрос Q_PROCESSOR_POWER также определён, когда определён Q_PROCESSOR_POWER_64.

См. также QSysInfo::buildCpuArchitecture().

[since 5.13] Q_PROCESSOR_RISCV

Определяется, если приложение скомпилировано для процессоров RISC-V. Qt в настоящее время поддерживает два варианта RISC-V: Q_PROCESSOR_RISCV_32 и Q_PROCESSOR_RISCV_64.

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

См. также QSysInfo::buildCpuArchitecture().

[since 5.13] Q_PROCESSOR_RISCV_32

Определяется, если приложение скомпилировано для 32-битных процессоров RISC-V. Макрос Q_PROCESSOR_RISCV также определён, когда определён Q_PROCESSOR_RISCV_32.

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

См. также QSysInfo::buildCpuArchitecture().

[since 5.13] Q_PROCESSOR_RISCV_64

Определяется, если приложение скомпилировано для 64-битных процессоров RISC-V. Макрос Q_PROCESSOR_RISCV также определён, когда определён Q_PROCESSOR_RISCV_64.

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

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_S390_X

Определяется, если приложение скомпилировано для процессоров S/390x. Макрос Q_PROCESSOR_S390 также определён, когда определён Q_PROCESSOR_S390_X.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_SH

Определяется, если приложение скомпилировано для процессоров SuperH. Qt в настоящее время поддерживает одну ревизию SuperH: Q_PROCESSOR_SH_4A.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_SH_4A

Определяется, если приложение скомпилировано для процессоров SuperH 4A. Макрос Q_PROCESSOR_SH также определён, когда определён Q_PROCESSOR_SH_4A.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_SPARC

Определяется, если приложение скомпилировано для процессоров SPARC. Qt в настоящее время поддерживает одну необязательную ревизию SPARC: Q_PROCESSOR_SPARC_V9.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_SPARC_V9

Определяется, если приложение скомпилировано для процессоров SPARC V9. Макрос Q_PROCESSOR_SPARC также определён, когда определён Q_PROCESSOR_SPARC_V9.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_X86_32

Определяется, если приложение скомпилировано для 32-битных процессоров x86. Это включает все процессоры i386, i486, i586 и i686. Макрос Q_PROCESSOR_X86 также определён, когда определён Q_PROCESSOR_X86_32.

См. также QSysInfo::buildCpuArchitecture().

Q_PROCESSOR_X86_64

Определяется, если приложение скомпилировано для 64-битных процессоров x86. Это включает все процессоры AMD64, Intel 64 и другие x86_64/x64 процессоры. Макрос Q_PROCESSOR_X86 также определён, когда определён Q_PROCESSOR_X86_64.

См. также QSysInfo::buildCpuArchitecture().

quint64 Q_UINT64_C(literal)

Оборачивает целое беззнаковое 64-битное число literal независимым от платформы способом.

Пример:

quint64 value = Q_UINT64_C(932838457459459);

См. также quint64 и Q_INT64_C().

Q_UNLIKELY(expr)

Подсказывает компилятору, что заключённое условие expr, вероятно, приведёт к false.

Использование этого макроса может помочь компилятору оптимизировать код.

Пример:

bool readConfiguration(const QFile &file)
{
    // We expect to be asked to read an existing file
    if (Q_UNLIKELY(!file.exists())) {
        qWarning() << "File not found";
        return false;
    }

    ...
    return true;
}

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

[since 5.0] void Q_UNREACHABLE

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

Этот макрос полезен для маркировки невозможных условий. Например, учитывая следующий перечисление:

   enum Shapes {
       Rectangle,
       Triangle,
       Circle,
       NumShapes
   };

Можно написать таблицу переключений следующим образом:

   switch (shape) {
       case Rectangle:
           return rectangle();
       case Triangle:
           return triangle();
       case Circle:
           return circle();
       case NumShapes:
           Q_UNREACHABLE();
           break;
   }

Преимущество вставки Q_UNREACHABLE() в этот момент состоит в том, что компилятор получает указание не генерировать код для переменной shape, содержащей это значение. Если макрос отсутствует, компилятор всё равно сгенерирует необходимые сравнения для этого значения. Если метка case была удалена, некоторые компиляторы могут выдать предупреждение о том, что некоторые значения перечисления не были проверены.

Использование этого макроса в невозможных условиях может улучшить покрытие кода, поскольку пути мёртвого кода могут быть устранены.

В отладочных сборках условие проверяется с помощью утверждения (assert) для облегчения отладки.

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

См. также Q_ASSERT(), Q_ASSUME() и qFatal().

Q_UNUSED(name)

Указывает компилятору, что параметр с указанным именем name не используется в теле функции. Это можно использовать для подавления предупреждений компилятора, позволяя функциям определяться с осмысленными именами параметров в их сигнатурах.

foreach(variable, container)

Эта макрокоманда используется для реализации цикла Qt foreach. Параметр variable представляет имя переменной или определение переменной; параметр container — это контейнер Qt, тип значения которого соответствует типу переменной. Подробности см. в Разделе foreach.

Если вы обеспокоены загрязнением пространства имен, вы можете отключить эту макрокоманду, добавив следующую строку в свой файл .pro:

CONFIG += no_keywords

Примечание: С Qt 5.7 использование этой макрокоманды не рекомендуется. Она будет удалена в будущей версии Qt. Используйте цикл range-for C++11, возможно, с qAsConst(), если необходимо.

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

forever

Эта макрокоманда предоставляется для удобства записи бесконечных циклов.

Пример:

forever {
    ...
}

Она эквивалентна for (;;).

Если вы обеспокоены загрязнением пространства имен, вы можете отключить эту макрокоманду, добавив следующую строку в свой файл .pro:

CONFIG += no_keywords

См. также Q_FOREVER.

qCritical(const char *message, ...)

Вызывает обработчик сообщений с критическим сообщением message. Если обработчик сообщений не установлен, сообщение выводится в stderr. В Windows сообщение отправляется в отладчик. В QNX сообщение отправляется в slogger2.

Функция завершается, если переменная среды QT_FATAL_CRITICALS не пуста.

Функция принимает строку формата и список аргументов, аналогично функции C printf(). Формат должен быть строкой Latin-1.

Пример:

void load(const QString &fileName)
{
    QFile file(fileName);
    if (!file.exists())
        qCritical("File '%s' does not exist!", qUtf8Printable(fileName));
}

Если включить <QtDebug>, доступна более удобная синтаксическая конструкция:

qCritical() << "Brush:" << myQBrush << "Other
value:" << i;

Между элементами вставляется пробел, а в конце добавляется перевод строки.

Чтобы подавить вывод во время выполнения, установите свой собственный обработчик сообщений с помощью qInstallMessageHandler().

Примечание: Эта функция безопасна для многопоточного доступа.

См. также qDebug(), qInfo(), qWarning(), qFatal(), qInstallMessageHandler() и Методы отладки.

qDebug(const char *message, ...)

Вызывает обработчик сообщений с отладочным сообщением message. Если обработчик сообщений не установлен, сообщение выводится в stderr. В Windows сообщение отправляется в консоль, если это консольное приложение; в противном случае — в отладчик. В QNX сообщение отправляется в slogger2. Эта функция ничего не делает, если QT_NO_DEBUG_OUTPUT было определено во время компиляции.

Если вы передаёте функции строку формата и список аргументов, она работает аналогично функции C printf(). Формат должен быть строкой Latin-1.

Пример:

qDebug("Items in list: %d", myList.size());

Если вы включите <QtDebug>, доступна более удобная синтаксическая конструкция:

qDebug() << "Brush:" << myQBrush << "Other value:" << i;

С этим синтаксисом функция возвращает объект QDebug, настроенный для использования типа сообщения QtDebugMsg. Он автоматически вставляет пробел между каждым элементом и добавляет перевод строки в конце. Поддерживает множество типов C++ и Qt.

Чтобы подавить вывод во время выполнения, установите свой собственный обработчик сообщений с помощью qInstallMessageHandler().

Примечание: Эта функция безопасна для многопоточного доступа.

См. также qInfo(), qWarning(), qCritical(), qFatal(), qInstallMessageHandler() и Методы отладки.

qFatal(const char *message, ...)

Вызывает обработчик сообщений с фатальным сообщением message. Если обработчик сообщений не установлен, сообщение выводится в stderr. В Windows сообщение отправляется в отладчик. В QNX сообщение отправляется в slogger2.

Если используется по умолчанию обработчик сообщений, эта функция прервёт выполнение программы, создавая дамп ядра. В Windows для отладочных сборок эта функция сообщит об ошибке _CRT_ERROR, что позволит подключить отладчик к приложению.

Функция принимает строку формата и список аргументов, аналогично функции C printf().

Пример:

int divide(int a, int b)
{
    if (b == 0)                                // program error
        qFatal("divide: cannot divide by zero");
    return a / b;
}

Чтобы подавить вывод во время выполнения, установите свой собственный обработчик сообщений с помощью qInstallMessageHandler().

См. также qDebug(), qInfo(), qWarning(), qCritical(), qInstallMessageHandler() и Методы отладки.

qInfo(const char *message, ...)

Вызывает обработчик сообщений с информационным сообщением message. Если обработчик сообщений не установлен, сообщение выводится в stderr. В Windows сообщение отправляется в консоль, если это консольное приложение; в противном случае — в отладчик. В QNX сообщение отправляется в slogger2. Эта функция ничего не делает, если QT_NO_INFO_OUTPUT было определено во время компиляции.

Если вы передаёте функции строку формата и список аргументов, она работает аналогично функции C printf(). Формат должен быть строкой Latin-1.

Пример:

qInfo("Items in list: %d", myList.size());

Если вы включите <QtDebug>, доступна более удобная синтаксическая конструкция:

qInfo() << "Brush:" << myQBrush << "Other value:" << i;

С этим синтаксисом функция возвращает объект QDebug, настроенный для использования типа сообщения QtInfoMsg. Он автоматически вставляет пробел между каждым элементом и добавляет перевод строки в конце. Поддерживает множество типов C++ и Qt.

Чтобы подавить вывод во время выполнения, установите свой собственный обработчик сообщений с помощью qInstallMessageHandler().

Примечание: Эта функция безопасна для многопоточного доступа.

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

См. также qDebug(), qWarning(), qCritical(), qFatal(), qInstallMessageHandler() и Методы отладки.

const char *qPrintable(const QString &str)

Возвращает str как const char *. Это эквивалентно str.toLocal8Bit().constData().

Указатель на char станет недоступным после оператора, в котором используется qPrintable(). Это происходит потому, что массив, возвращаемый QString::toLocal8Bit(), выходит из области видимости.

Примечание: qDebug(), qInfo(), qWarning(), qCritical(), qFatal() ожидают аргументов типа %s, закодированных в UTF-8, в то время как qPrintable() преобразует их в локальное кодирование 8 бит. Поэтому для записи строк в журналы следует использовать qUtf8Printable() вместо qPrintable().

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

qUtf16Printable(const QString &str)

Возвращает str как const ushort *, но приводится к типу const wchar_t * для избежания предупреждений. Это эквивалентно str.utf16() с дополнительными преобразованиями.

Единственное полезное действие, которое можно выполнить с возвращаемым значением этой макрокоманды, — передать его в QString::asprintf() для использования в %ls преобразовании. В частности, возвращаемое значение — не допустимый const wchar_t*!

В общем случае указатель станет недоступным после оператора, в котором используется qUtf16Printable(). Это происходит потому, что указатель может быть получен из временного выражения, которое выходит из области видимости.

Пример:

qWarning("%ls: %ls", qUtf16Printable(key), qUtf16Printable(value));

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

См. также qPrintable(), qDebug(), qInfo(), qWarning(), qCritical() и qFatal().

qUtf8Printable(const QString &str)

Возвращает str как const char *. Это эквивалентно str.toUtf8().constData().

Указатель на char станет недоступным после оператора, в котором используется qUtf8Printable(). Это происходит потому, что массив, возвращаемый QString::toUtf8(), выходит из области видимости.

Пример:

qWarning("%s: %s", qUtf8Printable(key), qUtf8Printable(value));

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

См. также qPrintable(), qDebug(), qInfo(), qWarning(), qCritical() и qFatal().

qWarning(const char *message, ...)

Вызывает обработчик сообщений с предупреждающим сообщением message. Если обработчик сообщений не установлен, сообщение выводится в stderr. В Windows сообщение отправляется отладчику. В QNX сообщение отправляется в slogger2. Эта функция ничего не делает, если QT_NO_WARNING_OUTPUT было определено во время компиляции; она завершается, если n-ое предупреждение соответствует счётчику в переменной среды QT_FATAL_WARNINGS. То есть, если переменная среды содержит значение 1, она завершится после первого сообщения; если содержит значение 10, она завершится после десятого сообщения. Любое нечисловое значение эквивалентно 1.

Эта функция принимает строку форматирования и список аргументов, аналогично функции C printf(). Формат должен быть строкой Latin-1.

Пример:

void f(int c)
{
    if (c > 200)
        qWarning("f: bad argument, c == %d", c);
}

Если вы включите <QtDebug>, также доступен более удобный синтаксис:

qWarning() << "Brush:" << myQBrush << "Other value:"
<< i;

Этот синтаксис вставляет пробел между каждым элементом и добавляет новую строку в конце.

Чтобы подавить вывод во время выполнения, установите свой собственный обработчик сообщений с помощью qInstallMessageHandler().

Примечание: Эта функция безопасна для потоков.

См. также qDebug(), qInfo(), qCritical(), qFatal(), qInstallMessageHandler(), и Методы отладки.

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

Spec-Zone.ru

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