Qdebug что это
Перейти к содержимому

Qdebug что это

  • автор:

QDebug Class

QDebug используется всякий раз, когда разработчику необходимо записать отладочную или трассировочную информацию на устройство, файл, строку или консоль.

Basic Use

В общем случае полезно вызвать функцию qDebug (), чтобы получить объект QDebug по умолчанию, который будет использоваться для записи отладочной информации.

qDebug() "Date:" currentDate(); qDebug() "Types:" QString("String") QChar('x') QRect(0, 10, 50, 40); qDebug() "Custom coordinate type:" 

Это создает объект QDebug с использованием конструктора, который принимает значение QtMsgType QtDebugMsg . Точно так же функции qWarning (), qCritical () и qFatal () также возвращают объекты QDebug для соответствующих типов сообщений.

Класс также предоставляет несколько конструкторов для других ситуаций, в том числе конструктор, который принимает QFile или любой другой подкласс QIODevice , который используется для записи отладочной информации в файлы и другие устройства. Конструктор, который принимает QString , используется для записи в строку для отображения или сериализации.

Formatting Options

QDebug форматирует выходные данные так, чтобы их было легко прочитать. Он автоматически добавляет пробелы между аргументами и добавляет кавычки вокруг аргументов QString , QByteArray , QChar .

Вы можете настроить эти параметры с помощью методов space (), nospace () и quote (), noquote (). Кроме того, QTextStream manipulators можно передать в поток QDebug.

QDebugStateSaver ограничивает изменения форматирования текущей областью. resetFormat () сбрасывает параметры на значения по умолчанию.

Запись пользовательских типов в поток

Многие стандартные типы могут быть записаны в объекты QDebug, а Qt обеспечивает поддержку большинства типов значений Qt. Чтобы добавить поддержку пользовательских типов, вам нужно реализовать оператор потоковой передачи, как в следующем примере:

QDebug operator<<(QDebug debug, const Coordinate &c) < QDebugStateSaver saver(debug); debug.nospace() '(' << c.x() ", " << c.y() ')'; return debug; >

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

[since 5.13] перечисление QDebug::VerbosityLevel

Это перечисление описывает диапазон уровней детализации.

Constant Value
QDebug::MinimumVerbosity 0
QDebug::DefaultVerbosity 2
QDebug::MaximumVerbosity 7

Это перечисление было введено или изменено в Qt 5.13..

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

Т1482Т Н1482Н и o )

Создает копию другого потока отладки o .

QDebug::QDebug(QtMsgType t )

Создает поток отладки, который записывает в обработчик для типа сообщения t .

QDebug::QDebug(QString * string )

Создает поток отладки, который записывает в заданный string .

QDebug::QDebug(QIODevice * device )

Создает поток отладки, который записывает в заданный device .

QDebug &QDebug::operator=(const QDebug и other )

Assigns the other поток отладки в этот поток и возвращает ссылку на этот поток.

QDebug::~QDebug()

Сбрасывает все ожидающие записи данные и уничтожает поток отладки.

[since 5.0] bool QDebug::autoInsertSpaces() константа

Возвращает true , если этот экземпляр QDebug будет автоматически вставлять пробелы между записями.

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

К1482К П1482П В3138В c = '"')

Записывает символ c в поток отладки, в зависимости от текущей настройки автоматической вставки кавычек, и возвращает ссылку на поток.

Символ по умолчанию — двойная кавычка " .

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

QDebug &QDebug::maybeSpace()

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

В1482В К1482К &QDebug::noquote()

Отключает автоматическую вставку символов кавычек вокруг содержимого QChar , QString и QByteArray и возвращает ссылку на поток.

Когда цитирование отключено, эти типы печатаются без кавычек и без экранирования непечатаемых символов.

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

QDebug &QDebug::nospace()

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

К1482К К1482К В3138В

Включает автоматическую вставку символов кавычек вокруг содержимого QChar , QString и QByteArray и возвращает ссылку на поток.

Цитирование включено по умолчанию.

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

К1482К Н1482Н В3138В

Сбрасывает параметры форматирования потока, возвращая его в исходное построенное состояние.

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

К1482К В3138В Т2646Т b )

Включает автоматическую вставку пробелов между записями, если b это true; в противном случае автоматическая вставка пробелов отключена.

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

[since 5.6] void QDebug::setVerbosity(int verbosityLevel )

Устанавливает многословие потока на verbosityLevel .

Допустимый диапазон — от 0 до 7. Значение по умолчанию — 2.

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

QDebug &QDebug::space()

Записывает пробел в поток отладки и возвращает ссылку на поток.

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

[since 5.0] void QDebug::swap( QDebug и other )

Меняет местами этот экземпляр потока отладки с other . Эта функция работает очень быстро и никогда не дает сбоев.

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

Шаблон [static, since 6.0] QString QDebug::toString(T && object )

Streams object в экземпляр QDebug , который работает со строкой, а затем возвращает эту строку.

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

QTRY_VERIFY2(list.isEmpty(), qPrintable(QString::fromLatin1( "Expected list to be empty, but it has the following items: %1")).arg(QDebug::toString(list)));

Строка передается с помощью nospace ()..

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

В1482В П1482П К3138К verbosityLevel )

Устанавливает многословие потока на verbosityLevel и возвращает ссылку на поток.

Допустимый диапазон — от 0 до 7. Значение по умолчанию — 2.

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

[since 5.6] целое QDebug::verbosity() константное

Возвращает уровень детализации потока отладки.

Операторы потоковой передачи могут проверить значение, чтобы решить, требуется ли подробный вывод, и распечатать дополнительную информацию в зависимости от уровня. Более высокие значения указывают на то, что требуется больше информации.

Допустимый диапазон — от 0 до 7. Значение по умолчанию — 2.

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

QDebug &QDebug::operator<<(QChar t )

Пишет характер, t , в поток и возвращает ссылку на поток. Обычно QDebug печатает управляющие символы и символы non-US-ASCII как их escape-последовательности C или их значение Unicode (\u1234).. Чтобы печатать непечатаемые символы без преобразования, включите функциональность noquote (), но учтите, что некоторые бэкенды QDebug могут не быть 8-битными и не иметь возможности представлять t .

QDebug &QDebug::operator <<(bool t )

Записывает значение boolean, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(char t )

Пишет характер, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(short t )

Записывает короткое целое со знаком, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(unsignedshort t )

Затем записывает короткое целое число без знака, t , в поток и возвращает ссылку на поток.

В1482В П1482П К3138К t )

Записывает символ UTF-16, t , в поток и возвращает ссылку на поток.

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

В1482В К1482К &QDebug::operator <<(char32_t t )

Записывает символ UTF-32, t , в поток и возвращает ссылку на поток.

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

QDebug &QDebug::operator <<(int t )

Записывает целое число со знаком, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(unsignedint t )

Затем записывает целое число без знака, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(long t )

Записывает длинное целое число со знаком, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(unsignedlong t )

Затем записывает длинное целое число без знака, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator<<(qint64 t )

Записывает 64-битное целое число со знаком, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator<<(quint64 t )

Затем записывает беззнаковое 64-битное целое число, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(float t )

Записывает 32-битное число с плавающей запятой, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(double t )

Записывает 64-битное число с плавающей запятой, t , в поток и возвращает ссылку на поток.

QDebug &QDebug::operator <<(const char * t )

Записывает строку UTF-8, заканчивающуюся '\0', t , в поток и возвращает ссылку на поток. Строка никогда не заключается в кавычки и не экранируется для вывода. Обратите внимание, что QDebug внутренне буферизуется как UTF-16, и может потребоваться преобразование в 8-битное с использованием кодека локали, чтобы использовать некоторые серверные части, что может привести к искажению вывода. (mojibake).: Рекомендуется ограничиться строками US-ASCII.

В1482В П1482П В3138К Т4391Т * t )

Записывает строку UTF-16 с окончанием u'\0', t , в поток и возвращает ссылку на поток. Строка никогда не заключается в кавычки и не экранируется для вывода. Обратите внимание, что QDebug внутренне буферизуется как UTF-16, и может потребоваться преобразование в 8-битное с использованием кодека локали, чтобы использовать некоторые серверные части, что может привести к искажению вывода. (mojibake).: Рекомендуется ограничиться строками US-ASCII.

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

QDebug &QDebug::operator<<(const QString и t )

Записывает строку, t , в поток и возвращает ссылку на поток. Обычно QDebug печатает строку в кавычках и преобразует непечатаемые символы в их значения Unicode (\u1234).

Чтобы печатать непечатаемые символы без преобразования, включите функцию noquote (). Обратите внимание, что некоторые серверные части QDebug могут не быть 8-битными.

QString s; s = "a"; qDebug().noquote() s; // prints: a qDebug() ; // prints: "a" s = "\"a\r\n\""; qDebug() s; // prints: "\"a\r\n\"" s = "\033"; // escape character qDebug() s; // prints: "\u001B" s = "\u00AD"; // SOFT HYPHEN qDebug() s; // prints: "\u00AD" s = "\u00E1"; // LATIN SMALL LETTER A WITH ACUTE qDebug() s; // prints: "á" s = "a\u0301"; // "a" followed by COMBINING ACUTE ACCENT qDebug() s; // prints: "á"; s = "\u0430\u0301"; // CYRILLIC SMALL LETTER A followed by COMBINING ACUTE ACCENT qDebug() s; // prints: "а́"

Т1482Т Л1482Л З3138З Н2646Н s )

Записывает представление строки, s , в поток и возвращает ссылку на поток. Обычно QDebug печатает строку в кавычках и преобразует непечатаемые символы в их значения Unicode (\u1234).

Чтобы печатать непечатаемые символы без преобразования, включите функцию noquote (). Обратите внимание, что некоторые серверные части QDebug могут не быть 8-битными.

См. примеры перегрузки QString .

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

В1482В К1482К К3138К Л2646Л s )

Записывает представление строки, s , в поток и возвращает ссылку на поток.

Обычно QDebug печатает данные в кавычках и преобразует управляющие символы или символы non-US-ASCII в управляющие последовательности C (\xAB).. Таким образом, вывод всегда является 7-битным чистым, и строку можно скопировать из вывода и при необходимости вставить обратно в источники C++.

Чтобы печатать непечатаемые символы без преобразования, включите функцию noquote (). Обратите внимание, что некоторые серверные части QDebug могут не быть 8-битными.

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

QDebug &QDebug::operator<<(QLatin1String t )

Записывает строку, t , в поток и возвращает ссылку на поток. Обычно QDebug печатает строку в кавычках и преобразует непечатаемые символы в их значения Unicode (\u1234).

Чтобы печатать непечатаемые символы без преобразования, включите функцию noquote (). Обратите внимание, что некоторые серверные части QDebug могут не быть 8-битными.

См. примеры перегрузки QString .

QDebug &QDebug::operator<<(const QByteArray и t )

Записывает массив байтов, t , в поток и возвращает ссылку на поток. Обычно QDebug печатает массив внутри кавычек и преобразует управляющие символы или символы non-US-ASCII в их escape-последовательности C (\xAB).. Таким образом, вывод всегда является 7-битным чистым, и строку можно скопировать из вывода и при необходимости вставить обратно в источники C++.

Чтобы печатать непечатаемые символы без преобразования, включите функцию noquote (). Обратите внимание, что некоторые серверные части QDebug могут не быть 8-битными.

QByteArray ba; ba = "a"; qDebug().noquote() ba; // prints: a qDebug() ; // prints: "a" ba = "\"a\r\n\""; qDebug() ba; // prints: "\"a\r\n\"" ba = "\033"; // escape character qDebug() ba; // prints: "\x1B" ba = "\xC3\xA1"; qDebug() ba; // prints: "\xC3\xA1" ba = QByteArray("a\0b", 3); qDebug() ba // prints: "\a\x00""b"

Обратите внимание, что QDebug необходимо было закрыть и снова открыть строку таким же образом, как языки C и C++ объединяют строковые литералы, чтобы буква «b» не интерпретировалась как часть предыдущей шестнадцатеричной управляющей последовательности.

В1482В П1482П К3138К К2646К t )

Записывает данные наблюдаемого массива байтов, t , в поток и возвращает ссылку на поток.

Обычно QDebug печатает данные в кавычках и преобразует управляющие символы или символы non-US-ASCII в управляющие последовательности C (\xAB).. Таким образом, вывод всегда является 7-битным чистым, и строку можно скопировать из вывода и при необходимости вставить обратно в источники C++.

Чтобы печатать непечатаемые символы без преобразования, включите функцию noquote (). Обратите внимание, что некоторые серверные части QDebug могут не быть 8-битными.

Примеры см. в перегрузке QByteArray .

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

QDebug &QDebug::operator <<(const void * t )

Пишет указатель, t , в поток и возвращает ссылку на поток.

Related Non-Members

template QDebug operator<<( QDebug debug , константа QMultiHash & hash )

Записывает содержимое hash to debug . И Key , и T должны поддерживать потоковую передачу в QDebug .

шаблон QDebug operator<<( QDebug debug , константа QPair & pair )

Записывает содержимое pair to debug . И T1 , и T2 должны поддерживать потоковую передачу в QDebug .

шаблон QDebug operator<<( QDebug debug , константа std::pair & pair )

Записывает содержимое pair to debug . И T1 , и T2 должны поддерживать потоковую передачу в QDebug .

шаблон QDebug operator<<( QDebug debug , константа QContiguousCache и cache )

Записывает содержимое cache to debug . T должен поддерживать потоковую передачу в QDebug .

шаблон QDebug operator<<( QDebug debug , константа QFlags и flags )

Writes flags to debug .

шаблон QDebug operator<<( QDebug debug , константа QList и list )

Записывает содержимое list to debug . T должен поддерживать потоковую передачу в QDebug .

Шаблон [since 5.7] QDebug operator<<( QDebug debug , const std::list & vec )

Записывает содержимое списка vec to debug . T должен поддерживать потоковую передачу в QDebug .

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

Шаблон [since 5.7] QDebug operator<<( QDebug debug , const std::vector & vec )

Записывает содержимое вектора vec to debug . T должен поддерживать потоковую передачу в QDebug .

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

шаблон QDebug operator<<( QDebug debug , константа QSet & set )

Записывает содержимое set to debug . T должен поддерживать потоковую передачу в QDebug .

template QDebug operator<<( QDebug debug , константа QMap & map )

Записывает содержимое map to debug . И Key , и T должны поддерживать потоковую передачу в QDebug .

template QDebug operator<<( QDebug debug , константа QMultiMap & map )

Записывает содержимое map to debug . И Key , и T должны поддерживать потоковую передачу в QDebug .

[since 5.7] template QDebug operator<<( QDebug debug , const std::map & map )

Записывает содержимое map to debug . И Key , и T должны поддерживать потоковую передачу в QDebug .

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

[since 5.7] template QDebug operator<<( QDebug debug , const std::multimap & map )

Записывает содержимое map to debug . И Key , и T должны поддерживать потоковую передачу в QDebug .

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

template QDebug operator<<( QDebug debug , константа QHash & hash )

Записывает содержимое hash to debug . И Key , и T должны поддерживать потоковую передачу в QDebug .

QDebug Class

QDebug is used whenever the developer needs to write out debugging or tracing information to a device, file, string or console.

Basic Use

In the common case, it is useful to call the qDebug() function to obtain a default QDebug object to use for writing debugging information.

qDebug()  "Date:"  QDate::currentDate(); qDebug()  "Types:"  QString("String")  QChar('x')  QRect(0, 10, 50, 40); qDebug()  "Custom coordinate type:"  coordinate;

This constructs a QDebug object using the constructor that accepts a QtMsgType value of QtDebugMsg. Similarly, the qWarning(), qCritical() and qFatal() functions also return QDebug objects for the corresponding message types.

The class also provides several constructors for other situations, including a constructor that accepts a QFile or any other QIODevice subclass that is used to write debugging information to files and other devices. The constructor that accepts a QString is used to write to a string for display or serialization.

Formatting Options

QDebug formats output so that it's easily readable. It automatically adds spaces between arguments, and adds quotes around QString, QByteArray, QChar arguments.

You can tweak these options through the space(), nospace() and quote(), noquote() methods. Furthermore, QTextStream manipulators can be piped into a QDebug stream.

QDebugStateSaver limits changes to the formatting to the current scope. resetFormat() resets the options to the default ones.

Writing Custom Types to a Stream

Many standard types can be written to QDebug objects, and Qt provides support for most Qt value types. To add support for custom types, you need to implement a streaming operator, as in the following example:

QDebug operator(QDebug debug, const Coordinate &c) < QDebugStateSaver saver(debug); debug.nospace()  '('  c.x()  ", "  c.y()  ')'; return debug; >

This is described in the Debugging Techniques and Creating Custom Qt Types documents.

Member Type Documentation

enum QDebug:: VerbosityLevel

This enum describes the range of verbosity levels.

Constant Value
QDebug::MinimumVerbosity 0
QDebug::DefaultVerbosity 2
QDebug::MaximumVerbosity 7

Member Function Documentation

[since 6.5] template QDebug &QDebug:: operator &s)

[since 6.5] template QDebug &QDebug:: operator s)

Writes the string or string-view s to the stream and returns a reference to the stream.

These operators only participate in overload resolution if Char is one of

  • char
  • char8_t (C++20 only)
  • char16_t
  • char32_t
  • wchar_t

This function was introduced in Qt 6.5.

[explicit] QDebug:: QDebug ( QIODevice *device)

Constructs a debug stream that writes to the given device.

[explicit] QDebug:: QDebug ( QString *string)

Constructs a debug stream that writes to the given string.

[explicit] QDebug:: QDebug ( QtMsgType t)

Constructs a debug stream that writes to the handler for the message type t.

QDebug:: QDebug (const QDebug &o)

Constructs a copy of the other debug stream o.

[noexcept] QDebug:: ~QDebug ()

Flushes any pending data to be written and destroys the debug stream.

bool QDebug:: autoInsertSpaces () const

Returns true if this QDebug instance will automatically insert spaces between writes.

QDebug &QDebug:: maybeQuote ( char c = '"')

Writes a character c to the debug stream, depending on the current setting for automatic insertion of quotes, and returns a reference to the stream.

The default character is a double quote " .

QDebug &QDebug:: maybeSpace ()

Writes a space character to the debug stream, depending on the current setting for automatic insertion of spaces, and returns a reference to the stream.

QDebug &QDebug:: noquote ()

Disables automatic insertion of quotation characters around QChar, QString and QByteArray contents and returns a reference to the stream.

When quoting is disabled, these types are printed without quotation characters and without escaping of non-printable characters.

QDebug &QDebug:: nospace ()

Disables automatic insertion of spaces and returns a reference to the stream.

QDebug &QDebug:: quote ()

Enables automatic insertion of quotation characters around QChar, QString and QByteArray contents and returns a reference to the stream.

Quoting is enabled by default.

QDebug &QDebug:: resetFormat ()

Resets the stream formatting options, bringing it back to its original constructed state.

void QDebug:: setAutoInsertSpaces ( bool b)

Enables automatic insertion of spaces between writes if b is true; otherwise automatic insertion of spaces is disabled.

void QDebug:: setVerbosity ( int verbosityLevel)

Sets the verbosity of the stream to verbosityLevel.

The allowed range is from 0 to 7. The default value is 2.

QDebug &QDebug:: space ()

Writes a space character to the debug stream and returns a reference to the stream.

The stream remembers that automatic insertion of spaces is enabled for future writes.

[noexcept] void QDebug:: swap ( QDebug &other)

Swaps this debug stream instance with other. This function is very fast and never fails.

[static, since 6.0] template QString QDebug:: toString ( T &&object)

Streams object into a QDebug instance that operates on a string, and then returns that string.

This function is useful for cases where you need the textual representation of an object for debugging, but cannot use operator

QTRY_VERIFY2(list.isEmpty(), qPrintable(QString::fromLatin1( "Expected list to be empty, but it has the following items: %1")).arg(QDebug::toString(list)));

The string is streamed using nospace().

This function was introduced in Qt 6.0.

QDebug &QDebug:: verbosity ( int verbosityLevel)

Sets the verbosity of the stream to verbosityLevel and returns a reference to the stream.

The allowed range is from 0 to 7. The default value is 2.

int QDebug:: verbosity () const

Returns the verbosity of the debug stream.

Streaming operators can check the value to decide whether verbose output is desired and print more information depending on the level. Higher values indicate that more information is desired.

The allowed range is from 0 to 7. The default value is 2.

QDebug &QDebug:: operatort)

Writes the character, t, to the stream and returns a reference to the stream. Normally, QDebug prints control characters and non-US-ASCII characters as their C escape sequences or their Unicode value (\u1234). To print non-printable characters without transformation, enable the noquote() functionality, but note that some QDebug backends may not be 8-bit clean and may not be able to represent t .

QDebug &QDebug:: operatort)

Writes the boolean value, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the character, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the signed short integer, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes then unsigned short integer, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the UTF-16 character, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the UTF-32 character, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the signed integer, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes then unsigned integer, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the signed long integer, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes then unsigned long integer, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the signed 64-bit integer, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes then unsigned 64-bit integer, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the 32-bit floating point number, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the 64-bit floating point number, t, to the stream and returns a reference to the stream.

QDebug &QDebug:: operatort)

Writes the '\0'-terminated UTF-8 string, t, to the stream and returns a reference to the stream. The string is never quoted or escaped for the output. Note that QDebug buffers internally as UTF-16 and may need to transform to 8-bit using the locale's codec in order to use some backends, which may cause garbled output (mojibake). Restricting to US-ASCII strings is recommended.

[since 6.0] QDebug &QDebug:: operatort)

Writes the u'\0'-terminated UTF-16 string, t, to the stream and returns a reference to the stream. The string is never quoted or escaped for the output. Note that QDebug buffers internally as UTF-16 and may need to transform to 8-bit using the locale's codec in order to use some backends, which may cause garbled output (mojibake). Restricting to US-ASCII strings is recommended.

This function was introduced in Qt 6.0.

QDebug &QDebug:: operatort)

Writes the string, t, to the stream and returns a reference to the stream. Normally, QDebug prints the string inside quotes and transforms non-printable characters to their Unicode values (\u1234).

To print non-printable characters without transformation, enable the noquote() functionality. Note that some QDebug backends might not be 8-bit clean.

QString s; s = "a"; qDebug().noquote()  s; // prints: a qDebug()  s; // prints: "a" s = "\"a\r\n\""; qDebug()  s; // prints: "\"a\r\n\"" s = "\033"; // escape character qDebug()  s; // prints: "\u001B" s = "\u00AD"; // SOFT HYPHEN qDebug()  s; // prints: "\u00AD" s = "\u00E1"; // LATIN SMALL LETTER A WITH ACUTE qDebug()  s; // prints: "á" s = "a\u0301"; // "a" followed by COMBINING ACUTE ACCENT qDebug()  s; // prints: "á"; s = "\u0430\u0301"; // CYRILLIC SMALL LETTER A followed by COMBINING ACUTE ACCENT qDebug()  s; // prints: "а́"

QDebug &QDebug:: operators)

Writes the string view, s, to the stream and returns a reference to the stream. Normally, QDebug prints the string inside quotes and transforms non-printable characters to their Unicode values (\u1234).

To print non-printable characters without transformation, enable the noquote() functionality. Note that some QDebug backends might not be 8-bit clean.

See the QString overload for examples.

[since 6.0] QDebug &QDebug:: operators)

Writes the string view, s, to the stream and returns a reference to the stream.

Normally, QDebug prints the data inside quotes and transforms control or non-US-ASCII characters to their C escape sequences (\xAB). This way, the output is always 7-bit clean and the string can be copied from the output and pasted back into C++ sources, if necessary.

To print non-printable characters without transformation, enable the noquote() functionality. Note that some QDebug backends might not be 8-bit clean.

This function was introduced in Qt 6.0.

QDebug &QDebug:: operatort)

Writes the string, t, to the stream and returns a reference to the stream. Normally, QDebug prints the string inside quotes and transforms non-printable characters to their Unicode values (\u1234).

To print non-printable characters without transformation, enable the noquote() functionality. Note that some QDebug backends might not be 8-bit clean.

See the QString overload for examples.

QDebug &QDebug:: operatort)

Writes the byte array, t, to the stream and returns a reference to the stream. Normally, QDebug prints the array inside quotes and transforms control or non-US-ASCII characters to their C escape sequences (\xAB). This way, the output is always 7-bit clean and the string can be copied from the output and pasted back into C++ sources, if necessary.

To print non-printable characters without transformation, enable the noquote() functionality. Note that some QDebug backends might not be 8-bit clean.

QByteArray ba; ba = "a"; qDebug().noquote()  ba; // prints: a qDebug()  ba; // prints: "a" ba = "\"a\r\n\""; qDebug()  ba; // prints: "\"a\r\n\"" ba = "\033"; // escape character qDebug()  ba; // prints: "\x1B" ba = "\xC3\xA1"; qDebug()  ba; // prints: "\xC3\xA1" ba = QByteArray("a\0b", 3); qDebug()  ba // prints: "\a\x00""b"

Note how QDebug needed to close and reopen the string in the way C and C++ languages concatenate string literals so that the letter 'b' is not interpreted as part of the previous hexadecimal escape sequence.

[since 6.0] QDebug &QDebug:: operatort)

Writes the data of the observed byte array, t, to the stream and returns a reference to the stream.

Normally, QDebug prints the data inside quotes and transforms control or non-US-ASCII characters to their C escape sequences (\xAB). This way, the output is always 7-bit clean and the string can be copied from the output and pasted back into C++ sources, if necessary.

To print non-printable characters without transformation, enable the noquote() functionality. Note that some QDebug backends might not be 8-bit clean.

See the QByteArray overload for examples.

This function was introduced in Qt 6.0.

QDebug &QDebug:: operatort)

Writes a pointer, t, to the stream and returns a reference to the stream.

[since 6.6] template QDebug &QDebug:: operator duration)

Prints the time duration duration to the stream and returns a reference to the stream. The printed string is the numeric representation of the period followed by the time unit, similar to what the C++ Standard Library would produce with std::ostream .

The unit is not localized.

This function was introduced in Qt 6.6.

QDebug &QDebug:: operator= (const QDebug &other)

Assigns the other debug stream to this stream and returns a reference to this stream.

Related Non-Members

template QDebug operatordebug, const QMap < Key , T >&map)

Writes the contents of map to debug. Both Key and T need to support streaming into QDebug.

template QDebug operatordebug, const QMultiMap < Key , T >&map)

Writes the contents of map to debug. Both Key and T need to support streaming into QDebug.

template QDebug operatordebug, const std::map < Key , T , Compare , Alloc >&map)

Writes the contents of map to debug. Both Key and T need to support streaming into QDebug.

template QDebug operatordebug, const std::multimap < Key , T , Compare , Alloc >&map)

Writes the contents of map to debug. Both Key and T need to support streaming into QDebug.

template QDebug operatordebug, const QHash < Key , T >&hash)

Writes the contents of hash to debug. Both Key and T need to support streaming into QDebug.

template QDebug operatordebug, const QMultiHash < Key , T >&hash)

Writes the contents of hash to debug. Both Key and T need to support streaming into QDebug.

template QDebug operatordebug, const QPair < T1 , T2 >&pair)

Writes the contents of pair to debug. Both T1 and T2 need to support streaming into QDebug.

template QDebug operatordebug, const std::pair < T1 , T2 >&pair)

Writes the contents of pair to debug. Both T1 and T2 need to support streaming into QDebug.

template QDebug operatordebug, const QContiguousCache < T >&cache)

Writes the contents of cache to debug. T needs to support streaming into QDebug.

template QDebug operatordebug, const QFlags < T >&flags)

Writes flags to debug.

template QDebug operatordebug, const QList < T >&list)

Writes the contents of list to debug. T needs to support streaming into QDebug.

[since 6.3] template QDebug operatordebug, const QVarLengthArray < T , P >&array = P)

Writes the contents of array to debug. T needs to support streaming into QDebug.

This function was introduced in Qt 6.3.

template QDebug operatordebug, const std::list < T , Alloc >&vec)

Writes the contents of list vec to debug. T needs to support streaming into QDebug.

template QDebug operatordebug, const std::vector < T , Alloc >&vec)

Writes the contents of vector vec to debug. T needs to support streaming into QDebug.

template QDebug operatordebug, const QSet < T >&set)

Writes the contents of set to debug. T needs to support streaming into QDebug.

© 2023 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.

Qt/C++ - Урок 057. Ошибки вывода qDebug() для чисел с плавающей точкой

При разработке программного обеспечения на Qt довелось столкнуться с одним нюансом при выводе чисел с плавающей запятой через qDebug(). Проблема заключается в том, что выводятся не все символы после запятой. Тем же самым грешит и вывод std::cout . Подобный user case может возникнуть в следующей ситуации: У вас имеется объект QString, который содержит некое число "8564.26495574", которое мы переводим в число с плавающей точкой с помощью метода toDouble(), и проверяем результат с помощью вывода qDebug() , но вот незадача, вывода оказывается ложным.

 
QString str("8564.26495574"); qDebug() 8564.26

Хотя на самом деле мы получаем совершенно правильное число, то есть из строки было получено число 8564.26495574 , просто вывод qDebug() показывает округлённый результат. Тоже самое можно наблюдать, если попытаться просто вывести значение числа double в qDebug().

 
double a = 8564.26495574; qDebug() 8564.26

Убедиться в том, что никаких ошибок не происходит при конвертировании числа из QString в double можно, воспользовавшись переменной bool, указатель на которую передаётся в качестве аргумента в метод toDouble().

 
QString str("8564.26495574"); bool ok = false; qDebug() 

Для того, чтобы сделать корректный вывод, необходимо воспользоваться методом QString::arg() с указанием типа форматирования и точности.

 
QString str("8564.26495574"); double a = 8564.26495574; double b = str.toDouble(); qDebug() 

В результате получим следующий вывод qDebug():

 
"8564.26496" "8564.3" "8.5642649557e+3" "8564.26495574000000488013029099" "8564.26496" "8564.3" "8.5642649557e+3" "8564.26495574000000488013029099"
  • 'g' - выводит указанное количество символов начиная с самого большого разряда в целой части числа;
  • 'f' - выводит указанное количество символов с точностью после запятой;
  • 'e' - выводит указанное количество символов с точностью после запятой и указанием числа скрытых разрядов.

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

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Рекомендуемые статьи по этой тематике

По статье задано0 вопрос(ов)

Подписка на обсуждение 1
Подписка на раздел 340

Вам это нравится? Поделитесь в социальных сетях!

Отладка классов в Qt5 с помощью QDebug

Работая с классами в Qt5 вам неоднократно приходилось сталкиваться с отладкой, при этом строчка вида:

qDebug() 

Используется очень часто, в том числе, когда нужно контролировать значения некоторых переменных, а запускать отладку долго и не эффективно. Если же вы хотите вывести значение полей экземпляра класса, тут qDebug() пасует – он попросту ничего не знает о вашем классе и всё, что вы получите в результате - строку вида 0x19e8aa45460. Сегодня мы рассмотрим перегрузку оператора

CountryFlag flag; qDebug() 

Создаем класс

Для тестов нам понадобится класс, мы будем использовать созданный в предыдущих статьях CountryFlag : Заголовок:

#ifndef COUNTRYFLAG_H #define COUNTRYFLAG_H #include class CountryFlag < public: CountryFlag(); CountryFlag(int id, QString name, QString icon); QString getIcon() const; void setIcon(const QString &value); QString getName() const; void setName(const QString &value); int getId() const; void setId(int value); private: int id; QString icon; QString name; >; #endif // COUNTRYFLAG_H

Реализация:

#include "countryflag.h" CountryFlag::CountryFlag() < >CountryFlag::CountryFlag(int id, QString name, QString icon) < this->id = id; this->name = name; this->icon = icon; > QString CountryFlag::getIcon() const < return icon; >void CountryFlag::setIcon(const QString &value) < icon = value; >QString CountryFlag::getName() const < return name; >void CountryFlag::setName(const QString &value) < name = value; >int CountryFlag::getId() const < return id; >void CountryFlag::setId(int value)

Заполним класс данными:

CountryFlag flag1 = CountryFlag(1, "Russia", "russia.png"); CountryFlag flag2 = CountryFlag(2, "Belarus", "belarus.png");

Теперь, для того, чтобы проверить какие данные содержаться в полях экземпляра класса нам нужно написать что-то вроде этого:

qDebug() 

и так далее, что неудобно и громоздко. Выход – добавить специальный метод toString() , который выведет все необходимые значения в виде компактной строки.

Добавляем метод toString()

QString CountryFlag::toString() const < QString s; QTextStream out(&s); out getId() getName() getIcon()

Добавим строку

qDebug() 

Запустим – в консоли увидим:

"CountryFlag( id: 1, name: Russia, icon: russia.png )"

Все работает, как нужно. Но использование метода toString() слишком длинно, мы хотим использовать строку вида:

qDebug() 

Для этого нам придется перегрузить оператор <<

Перегрузка оператора

Для использования нашего класса с QDebug мы должны перегрузить оператор <<. Обратите внимание, мы перегружаем его глобально! В заголовочном файле класса добавим строку в конец файла, за закрывающей скобкой описания класса >; это важно!

QDebug operator<<(QDebug debug, const CountryFlag &flag);

Реализация

QDebug operator
qDebug() 
CountryFlag( id: "1", name: "Russia", icon: "russia.png" )

Обратите внимание мы дублируем код из метода toString(), это вынужденная мера, в противном случае мы получим такую строку:

"CountryFlag( id: 1, name: Russia, icon: russia.png )"

Обратите внимание мы используем

const CountryFlag &flag

что означает что мы получаем константную ссылку на экземпляр класса CountryFlag , что в свою очередь гарантирует, что функция ничего не сможет изменить в полях класса CountryFlag .

Перегружаем
Помимо простой переменной у нас может быть указатель на экземпляр класса, давайте добавим код:

CountryFlag *flag3 = new CountryFlag(1, "Russia", "russia.png"); qDebug()  

Запустим – результат неожиданный:

0x209a3c67bf0

Всё дело в том, что мы передаем указатель вместо константной ссылки, а следовательно qDebug() не использует перегруженный метод созданный нами. Чтобы решить эту проблему, еще раз перегрузим оператор

QDebug operator<<(QDebug debug, const CountryFlag *flag);

Реализация

QDebug operator

Запускаем – результат:

CountryFlag( id: "1", name: "Russia", icon: "russia.png" )

Здесь все просто мы разыменовываем ссылку и передаем ее QDebug , а он уже использует перегруженный оператор для вывода строки.

Заключение

Сегодня мы рассмотрели использование QDebug() для отладки классов в Qt5 с помощью перегруженного оператора

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *