Опубликован: 07.03.2015 | Уровень: для всех | Доступ: свободно | ВУЗ: Компания ALT Linux
Лекция 12:

Структура проекта. Основные типы

12.3 Консольный проект Qt. Вывод сообщений.

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

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

Для вывода информации в консольном проекте можно использовать все привычные средства стандартной библиотеки C++. Но в Qt для этого есть удобный инструмент — функция qDebug(). Рассмотрим пример её использования:

#include <QDebug>
//Собственный тип данных — структура для комплексных чисел
struct complex
{
	double re;
	double im;
};
//Определение потокового оператора для поддержки вывода собственного типа
//complex с помощью qDebug()
QDebug operator<<(QDebug dbg, const complex &c )
{
	dbg.nospace ( ) << " ( " << c.re << " + i * " << c.im << " ) ";
	return dbg.space ( );
}
int main ( int lArg c, char * lArgv [ ] )
{
	//Вывод разнообразных типов данных
	qDebug ( ) << " Hello, " << " this is debug output ";
	qDebug ( ) << " Integer values : " << 1 << 10 << 100;
	qDebug ( ) <<" Doubles and floats : "<<.1 << .123 << 0.112345;
	qDebug ( ) << " Characters : " << " c " << " \ t " << " $ " << " \ n " << " newline ";
	qDebug ( ) << " Booleans : " << true << false;
	qDebug ( ) << " Pointers : " << lArgv;
	qDebug ( ) << " and much more...";
	//Вывод собственного типа данных
	complex c;
	c.re = 0.2;
	c.im = 1.5;
	qDebug ( ) << " including custom types : " << c;
	return 0;
}

После выполнения программы в консоли увидим текст:

Hello, this is debug output
Integer values: 1 10 100
Doubles and floats: 0.1 0.123 0.112345
Characters: c $
newline
Booleans: true false
Pointers: 0x3278fc8
and much more...
including custom types: (0.2 + i*1.5)

Кроме qDebug() существуют другие функции для вывода сообщений разного уровня. Описание и примеры этих функций рассмотрим в табл. 12.2.

Таблица 12.2. Функции для вывода сообщений
Функция Описание Особенности Пример
qDebug() Вывод сообщений для отладки, разнообразной информации при работе программы. Сообщения могут быть выключены с помощью специального макроопределения QT_NO_DEBUG_OUTPUT например, в файле проекта:
DEFINES +=
	QT_NO_DEBUG_OUTPUT
int error_num = 59;
std::string error_string (
	"uknown error" );
qDebug ( " result : % d ,
	description : % s " ,
	error_num, error_string
	. c_str ( ) );
__________________
#include <QDebug>
...
qDebug ( )<<" result : "" <<
	error_num <<" ,
	description : " <<
	error_string.c_str ( );
qWarning() Вывод сообщений при работе программы. Сообщения могут быть выключены с помощью специального макроопределения QT_NO_WARNING_OUTPUT например, в файле проекта:
DEFINES +=
	QT_NO_WARNING_OUTPUT
qWarning ( " warning : % d ,
	description : % s " ,
	error_num, error_string
	.c_str ( ) );
__________________
#include <QDebug>
...
qWarning ( )<<" warning : "
	<<error_num <<" ,
	description : " <<
	error_string.c_str ( );
qCritical() Вывод сообщений о критических ошибках.
qCritical ( " critical error
	: % d, description :% s " ,
	error_num, error_string
	.c_str ( ) );
__________________
#include <QDebug>
...
qCritical ( )<<" critical
	error : " <<error_num
	<<", description : " <<
	error_string.c_str ( );
		
qFatal() Вывод сообщений о фатальных для программы ошибках После вывода сообщения происходит аварийное завершение работы программы
qFatal ( " fatal error : % d ,
	description :% s " ,
	error_num, error_string
	.c_str ( ) );
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?