<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, const QString &defaultValue) |
| QString | qEnvironmentVariable(const char *varName) |
| 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) |
| std::underlying_type_t<Enum> | qToUnderlying(Enum e) |
| 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) |
Макросы
| 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. Этот тип гарантированно имеет 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 для беззнаковых значений.
Для вывода значений этого типа с помощью средств форматированного вывода, таких как printf(), qDebug(), QString::asprintf() и так далее, можно использовать макросы PRIdQINTPTR и PRIiQINTPTR в качестве спецификаторов формата. Они оба будут выводить значение как число в системе счисления с основанием 10.
qintptr p = 123;
printf("The pointer is %" PRIdQINTPTR "\n", p); См. также qptrdiff, qint32 и qint64.
qlonglong
Тип-синоним для long long int (__int64 в Windows). Это то же самое, что и qint64.
См. также qulonglong и qint64.
qptrdiff
Целочисленный тип для представления разницы указателей.
Тип-псевдоним для qint32 или qint64. Этот тип гарантированно имеет тот же размер, что и указатель, на всех платформах, поддерживаемых Qt. На системе с 32-разрядными указателями quintptr — это псевдоним для quint32; на системе с 64-разрядными указателями quintptr — это псевдоним для quint64.
Обратите внимание, что qptrdiff со знаком. Используйте quintptr для беззнаковых значений.
Для вывода значений этого типа с помощью средств форматированного вывода, таких как printf(), qDebug(), QString::asprintf() и т. д., вы можете использовать макросы PRIdQPTRDIFF и PRIiQPTRDIFF в качестве спецификаторов формата. Они оба выведут значение в десятичной системе.
qptrdiff d = 123;
printf("The difference is %" PRIdQPTRDIFF "\n", d); См. также quintptr, qint32 и qint64.
qreal
Тип-псевдоним для double за исключением случаев, когда Qt сконфигурирован с опцией -qreal float.
[alias, since 5.10] qsizetype
Целочисленный тип, предоставляющий POSIX' ssize_t для всех платформ.
Этот тип гарантированно имеет тот же размер, что и size_t на всех платформах, поддерживаемых Qt.
Обратите внимание, что qsizetype со знаком. Используйте size_t для беззнаковых значений.
Для вывода значений этого типа с помощью средств форматированного вывода, таких как printf(), qDebug(), QString::asprintf() и т. д., вы можете использовать макросы PRIdQSIZETYPE и PRIiQSIZETYPE в качестве спецификаторов формата. Они оба выведут значение в десятичной системе.
qsizetype s = 123;
printf("The size is %" PRIdQSIZETYPE "\n", s); Этот тип-псевдоним был введён в Qt 5.10.
См. также qptrdiff.
quint8
Тип-псевдоним для unsigned char. Этот тип гарантированно имеет 8 бит на всех платформах, поддерживаемых Qt.
quint16
Тип-псевдоним для unsigned short. Этот тип гарантированно имеет 16 бит на всех платформах, поддерживаемых Qt.
quint32
Тип-псевдоним для unsigned int. Этот тип гарантированно имеет 32 бита на всех платформах, поддерживаемых Qt.
quint64
Тип-псевдоним для unsigned long long int. Этот тип гарантированно имеет 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 для знаковых значений.
Для вывода значений этого типа с помощью средств форматированного вывода, таких как printf(), qDebug(), QString::asprintf() и т. д., вы можете использовать следующие макросы в качестве спецификаторов формата:
-
PRIuQUINTPTR: выводит значение в десятичной системе. -
PRIoQUINTPTR: выводит значение в восьмеричной системе. -
PRIxQUINTPTR: выводит значение в шестнадцатеричной системе с использованием строчных буквa-f. -
PRIXQUINTPTR: выводит значение в шестнадцатеричной системе с использованием заглавных буквA-F.
quintptr p = 123u;
printf("The pointer value is 0x%" PRIXQUINTPTR "\n", p); См. также 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 конечное с уменьшенной мантиссой
[since 5.10] QString qEnvironmentVariable(const char *varName)
[since 5.10] 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
[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 и Различия между строковыми и фанкторными подключениями.
[since 5.10] QString qEnvironmentVariable(const char *varName, const QString &defaultValue)
Эта функция была введена в Qt 5.10.
[since 5.10] QString qEnvironmentVariable(const char *varName)
Эта функция была введена в Qt 5.10.
[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.
Это реализация std::exchange() в Qt. Отличается от std::exchange() только тем, что она доступна constexpr уже в C++14 и доступна во всех поддерживаемых компиляторах.
Вот как использовать qExchange() для реализации конструкторов перемещения:
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(), поскольку их конструктор перемещения выполнит нужное действие. Но для скалярных типов, таких как указатели или целочисленные типы, перемещение такое же, как копирование, что, в частности для указателей, не является ожидаемым. Поэтому мы не можем использовать 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() возвращает неконстантный объект, поэтому контейнеры 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++ Комитета.
Эта функция была добавлена в 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} |
Широко известный ID текущей нити (если его можно получить) |
%{qthreadptr} |
Указатель на текущую нить QThread (результат QThread::currentThread()) |
%{type} |
"debug", "warning", "critical" или "fatal" |
%{time process} |
Время сообщения в секундах с момента запуска процесса (слово "процесс" – буквальное). |
%{time 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}" Стандартный шаблон: "%{if-category}%{category}: %{endif}%{message}".
Шаблон также может быть изменён во время выполнения, установив переменную среды QT_MESSAGE_PATTERN; если вызов qSetMessagePattern() и установка QT_MESSAGE_PATTERN выполнены, приоритет имеет переменная среды.
Примечание: Информация для заполнителей category, file, function и line сохраняется только в отладочных сборках. В качестве альтернативы, QT_MESSAGELOGCONTEXT может быть определено явно. Для получения дополнительной информации обратитесь к документации QMessageLogContext.
Примечание: Шаблон сообщения применяется только к неструктурированной регистрации, например, к стандартному выводу stderr. Структурированная регистрация, такая как systemd, будет записывать сообщение как есть, вместе со всей доступной структурированной информацией.
Пользовательские обработчики сообщений могут использовать qFormatLogMessage(), чтобы учитывать шаблон.
Эта функция была введена в Qt 5.0.
См. также qInstallMessageHandler(), Методы отладки, QLoggingCategory и QMessageLogContext.
[since 6.2] template <typename Enum> std::underlying_type_t<Enum> qToUnderlying(Enum e)
Преобразует перечислитель e в эквивалентное значение, выраженное в базовом типе перечисления.
Эта функция была введена в Qt 6.2.
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. Если соответствующая строка не найдена, возвращается сам 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().
END_OF_DOCUMENT_MARKERДокументация макросов
[since 6.2] PRIdQSIZETYPE
[since 6.2] PRIiQSIZETYPE
См. qsizetype.
Эта функция была введена в Qt 6.2.
[since 6.2] PRIdQPTRDIFF
[since 6.2] PRIiQPTRDIFF
См. qptrdiff.
Эта функция была введена в Qt 6.2.
[since 6.2] PRIXQUINTPTR
[since 6.2] PRIoQUINTPTR
[since 6.2] PRIuQUINTPTR
[since 6.2] PRIxQUINTPTR
См. quintptr.
Эта функция была введена в Qt 6.2.
[since 6.2] PRIdQINTPTR
[since 6.2] PRIiQINTPTR
См. qintptr.
Эта функция была введена в Qt 6.2.
[since 6.2] PRIXQUINTPTR
Эта функция была введена в Qt 6.2.
[since 6.2] PRIdQINTPTR
Эта функция была введена в Qt 6.2.
[since 6.2] PRIdQPTRDIFF
Эта функция была введена в Qt 6.2.
[since 6.2] PRIdQSIZETYPE
Эта функция была введена в Qt 6.2.
[since 6.2] PRIiQINTPTR
Эта функция была введена в Qt 6.2.
[since 6.2] PRIiQPTRDIFF
Эта функция была введена в Qt 6.2.
[since 6.2] PRIiQSIZETYPE
Эта функция была введена в Qt 6.2.
[since 6.2] PRIoQUINTPTR
Эта функция была введена в Qt 6.2.
[since 6.2] PRIuQUINTPTR
Эта функция была введена в Qt 6.2.
[since 6.2] PRIxQUINTPTR
Эта функция была введена в Qt 6.2.
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().
В отладочных сборках условие проверяется с помощью assert для облегчения отладки.
Примечание: Q_LIKELY() сообщает компилятору, что выражение вероятно, но не единственно возможно. Q_ASSUME сообщает компилятору, что это единственно возможное условие.
Эта функция была представлена в Qt 5.0.
См. также Q_ASSERT(), Q_UNREACHABLE() и Q_LIKELY().
Q_BIG_ENDIAN
Эта макрос представляет значение, которое можно сравнить с макросом Q_BYTE_ORDER, чтобы определить порядок байтов вашей системы. В системе с большим порядком байтов самый значимый байт хранится по наименьшему адресу. Другие байты следуют в порядке убывания значимости.
#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, несмотря на то, что они не являются trivially-copyable.
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, чтобы определить порядок байтов вашей системы. В системе с прямым порядком байтов наименее значимый байт хранится по наименьшему адресу. Другие байты следуют в порядке возрастания значимости.
#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().
[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 была удалена, некоторые компиляторы могли бы выдать предупреждение о том, что некоторые значения перечисления не проверялись.
Использование этого макроса в недостижимых условиях может улучшить покрытие кода, так как мёртвые пути кода могут быть удалены.
В отладочных сборках условие проверяется с помощью утверждения, чтобы облегчить отладку.
Эта функция была представлена в Qt 5.0.
См. также Q_ASSERT(), Q_ASSUME() и qFatal().
Q_UNUSED(name)
Указывает компилятору, что параметр с указанным именем name не используется в теле функции. Это можно использовать для подавления предупреждений компилятора, позволяя определять функции с осмысленными именами параметров в их сигнатурах.
foreach(variable, container)
Этот макрос используется для реализации цикла Qt's foreach. Параметр 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, она завершит работу на первом сообщении; если значение 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.2/qtglobal.html