Qt — & quot; \ П & Quot; не работает, но std :: endl работает?

У меня довольно странная проблема, с которой я никогда раньше не сталкивался, и я понятия не имею, что ее вызывает. Я работаю в Qt 4.7, и у меня есть много вещей в моем проекте, которые печатаются в терминал. Все эти отпечатки запускаются одним нажатием кнопки. Однако, когда я нажимаю кнопку, они не все печатают. Вместо этого все операторы печати, которые заканчиваются << std::endl; будет печатать, но первый, который заканчивается "random text...\n"; не будет, и никто из тех, кто после этого не будет, независимо от того, какой стиль они используют. Если я нажму кнопку еще раз, чтобы запустить все это снова, он будет затем выведите оставшиеся операторы, а затем тот же начальный вывод, что и в прошлый раз. Я мог бы просто сделать их все std :: endl, но есть много из них, так что я бы действительно не хотел. Я никогда не видел ничего подобного раньше, есть ли у кого-нибудь совет, как это исправить? Спасибо!

РЕДАКТИРОВАТЬ: Согласно запросу, это синтаксис (при условии, что в пользовательском интерфейсе есть кнопка вызова mybutton)


void on_mybutton_pressed()
{
std::cout << "A" << std::endl;
std::cout << "B" << std::endl;
std::cout << "C\n";
}

Выход после первого нажатия кнопки:

A
B

Выход после второго нажатия:

C
A
B

0

Решение

Вы можете включить единичную буферизацию для cout в начале вашей программы, если вы действительно хотите:

std::cout << std::unitbuf;

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

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

1

Другие решения

Вывод символов буферизуется. Буфер очищается, когда он заполняется, но часто для терминала вы не хотите ждать этого; std::endl Особенность в том, что он вызывает немедленную очистку буфера.

2

По вопросам рекламы [email protected]