<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), частично — типами, связанными с обработкой сообщений 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, не являющиеся const, в const 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
[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 не равно нулю, устанавливает *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)
Возвращает, является ли переменная среды varName пустой.
Эквивалентно
qgetenv(varName).isEmpty()
за исключением того, что оно потенциально намного быстрее и не может выбрасывать исключения.
Эта функция была добавлена в Qt 5.1.
См. также qgetenv(), qEnvironmentVariable() и qEnvironmentVariableIsSet().
[since 5.1] bool qEnvironmentVariableIsSet(const char *varName)
Возвращает, установлена ли переменная среды 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
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
[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++ Committee's Standing Document 6.
Эта функция была добавлена в 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() может привести к потере данных, если исходная строка содержит символы Unicode, не представимые в кодировке ANSI. Используйте qEnvironmentVariable() вместо этого. В системах Unix эта функция не приводит к потерям.
Примечание: Эта функция безопасна для многопоточного доступа.
См. также qputenv(), qEnvironmentVariable(), qEnvironmentVariableIsSet() и qEnvironmentVariableIsEmpty().
END_OF_DOCUMENT_MARKER ```bool qputenv(const char *varName, const QByteArray &value)
Эта функция устанавливает значение 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. Если соответствующая строка не найдена, возвращается сам 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 помечает идентификатор для динамического перевода.
Единственная цель этого макроса — предоставить якорь для прикрепления метаданных к 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 — false.
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 — false.
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 — true. Этот макрос полезен для улучшения генерации кода, предоставляя компилятору подсказки о условиях, о которых он бы в противном случае не знал. Однако нет гарантии, что компилятор фактически воспользуется этими подсказками.
Этот макрос можно рассматривать как «более лёгкую» версию Q_ASSERT(). В то время как Q_ASSERT прервёт выполнение программы, если условие — false, 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. Примечание: несмотря на название, это не имеет ничего общего с move-конструкторами или move-семантикой 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, несмотря на то, что они не являются trivially-copyable.
Q_DECL_CONSTEXPR
Этот макрос можно использовать для объявления переменной, которая должна быть создана во время компиляции, или для объявления встроенной функции, которая может быть вычислена во время компиляции.
Он расширяется до "constexpr", если ваш компилятор поддерживает этот ключевое слово C++11, или до ничего в противном случае.
См. также Q_DECL_RELAXED_CONSTEXPR.
Q_DECL_EXPORT
Этот макрос отмечает символ для экспорта из динамической библиотеки (см. Создание динамических библиотек).
См. также Q_DECL_IMPORT.
Q_DECL_IMPORT
Этот макрос объявляет символ для импорта из динамической библиотеки (см. Создание динамических библиотек).
См. также Q_DECL_EXPORT.
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().
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.
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, чтобы определить порядок байтов вашей системы. В системе с малым порядком байт наименее значимый байт хранится по самому низкому адресу. Остальные байты следуют в порядке возрастания значимости.
#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.
См. также 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().
Q_PROCESSOR_RISCV
Определяется, если приложение скомпилировано для процессоров RISC-V. Qt в настоящее время поддерживает два варианта RISC-V: Q_PROCESSOR_RISCV_32 и Q_PROCESSOR_RISCV_64.
Данная функция была добавлена в Qt 5.13.
См. также QSysInfo::buildCpuArchitecture().
Q_PROCESSOR_RISCV_32
Определяется, если приложение скомпилировано для 32-битных процессоров RISC-V. Макрос Q_PROCESSOR_RISCV также определён, когда определён Q_PROCESSOR_RISCV_32.
Данная функция была добавлена в Qt 5.13.
См. также QSysInfo::buildCpuArchitecture().
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 и Q_INT64_C().
Q_UNLIKELY(expr)
Подсказка компилятору, что данное условие expr, вероятно, приведёт к false.
Использование этого макроса может помочь компилятору оптимизировать код.
Пример:
См. также Q_LIKELY().
void Q_UNREACHABLE
Сообщает компилятору, что текущая точка не может быть достигнута никаким выполнением, поэтому он может оптимизировать все пути, ведущие сюда, а также код, продолжающийся отсюда, как мёртвый код.
Этот макрос полезен для обозначения недостижимых условий. Например, для следующего перечисления:
можно написать таблицу переключений так:
Преимущество вставки Q_UNREACHABLE() в этой точке заключается в том, что компилятору сообщается, что не нужно генерировать код для переменной shape, содержащей это значение. Если макрос отсутствует, компилятор всё равно сгенерирует необходимые сравнения для этого значения. Если метка case была бы удалена, некоторые компиляторы могли бы выдать предупреждение о том, что некоторые значения перечисления не проверяются.
Использование этого макроса в недостижимых условиях может улучшить покрытие кода, так как мёртвые пути кода могут быть удалены.
В отладочных сборках условие проверяется с помощью assert для облегчения отладки.
Данная функция была добавлена в Qt 5.0.
См. также Q_ASSERT(), Q_ASSUME() и qFatal().
Q_UNUSED(name)
Указывает компилятору, что параметр с указанным именем name не используется в теле функции. Это может быть использовано для подавления предупреждений компилятора, позволяя функциям определяться с осмысленными именами параметров в их сигнатурах.
foreach(variable, container)
Эта макрос используется для реализации цикла foreach Qt. Параметр variable представляет собой имя переменной или определение переменной; параметр container — это контейнер Qt, тип значения которого соответствует типу переменной. Подробности см. в Разделе foreach Keyword.
Если вы обеспокоены загрязнением пространства имен, вы можете отключить эту макрос, добавив следующую строку в свой файл .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() и Методы отладки.
[since 5.5] 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().
[since 5.7] const wchar_t *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().
[since 5.4] const char *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, она завершится после 1-го сообщения; если содержит значение 10, она завершится после 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.1/qtglobal.html