추가 된 공백과 줄 바꿈없이 qDebug를 호출하는 방법은 무엇입니까?
C ++ / Qt 인쇄 기능인 qDebug를 사용하고 있지만 ", 공백 및 줄 바꿈이 추가되고 기본 qDebug를 사용하지 않는 방법을 제어하고 싶습니다.
간단한 예를 들어 보겠습니다.
QString var1("some string");
int var2 = 1;
qDebug() << var1 << "=" << var2;
이것은 인쇄됩니다
"some string" = 1
하지만 추가 된 "및 공백이 마음에 들지 않고 인쇄물이 다음과 같이 보이기를 원한다고 가정 해 보겠습니다.
some string=1
그런 다음 qDebug를 어떻게 호출합니까?
참고 : qDebug에는 nospace라는 함수가 있지만 공백을 제거합니다. 그러나 "는 여전히 존재합니다.
이것을 사용하는 경우 :
qDebug().nospace() << var1 << "=" << var2;
나는 얻다:
"some string"=1
그러나 나는 여전히 끝 개행을 제거하는 방법을 찾지 못했다는 점에 유의하십시오.
/감사
이 형식을 사용해보십시오 : qDebug("%s=%d", "string", 1);
이 경우 qDebug
에는 printf 형식을 사용 합니다.
귀하의 예를 들어 PS Adapted : qDebug("%s=%d", var1.toStdString().c_str(), var2);
QDebug
내부적으로 어떻게 작동 하는지 이해하는 것이 가장 좋습니다 . 이렇게하면 필요에 맞게 쉽게 수정할 수 있습니다. qDebug()
함수 를 사용할 때마다 QDebug
객체를 반환 합니다. 기본적으로를 QDebug
사용한 후에는 항상 공백을 출력합니다 operator <<
.
QDebug
클래스는 내부적으로 포함되어 있습니다 QString
. 사용할 때마다 operator <<
내부 QString에 추가됩니다. 이 QString은 객체가 파괴 qt_message_output(QtMsgType, char*)
될 때 를 통해 인쇄됩니다 QDebug
.
기본적으로 qt_message_output
항상 문자열과 줄 바꿈을 인쇄합니다.
정상 출력
qDebug() << "Var" << 1;
출력 Var 1
됩니다. 를 호출 할 때마다 공백을 추가하는 객체를 qDebug
생성 하기 때문 입니다 . 그래서 그것은 + + 1 + 입니다.QDebug
operator <<
Var
공백없이
당신이 사용할 수있는 QDebug::nospace
얘기 QDebug
를 호출 할 때마다 뒤에 공백을 추가 할 수 없습니다 operator <<
.
qDebug().nospace() << "Var" << 1;
객체가 더 이상 인쇄 공간이 아니므 Var1
로 출력 됩니다 QDebug
.
줄 바꿈없이
\n
문자열 끝에를 추가하지 않는 것이 조금 더 어렵습니다. 이후 QDebug
내부적으로 만하는 캐릭터 라인 통과 qt_message_output
가 파괴 될 때를 해당 QDebug 객체의 파괴를 지연시킬 수 있습니다 -
QDebug deb = qDebug();
deb << "One" << "Two";
deb << "Three";
이것은 인쇄 One Two Three
하고 새 줄을 추가합니다.
새 줄을 인쇄하지 않으려면의 동작을 변경해야합니다 qt_message_output
. 이것은 사용자 정의 핸들러 를 설치하여 수행 할 수 있습니다 .
void customHandler(QtMsgType type, const char* msg) {
fprintf(stderr, msg);
fflush(stderr);
}
// Somewhere in your program
qInstallMsgHandler(customHandler);
qDebug() << "One" << "Two";
qDebug().noSpace() << "Three" << "Four";
이것은 인쇄 One Two ThreeFour
됩니다.
이것은 프로그램의 모든 qDebug 문에 영향을 미칩니다. 사용자 지정 처리기를 제거하려면 qInstallMsgHandler(0)
.
qDebug (const char * msg, ...)
다른 답변에서 알 수 있듯이 qDebug
함수를 사용하여 의 형식과 유사한 형식으로 문자열을 인쇄 할 수도 있습니다 printf
. 이렇게하면에 의해 추가되는 추가 공백을 피할 수 있습니다 QDebug
.
그러나 qDebug
내부적으로 여전히를 사용 qt_message_output
하므로 자체 핸들러를 설치하지 않는 한 마지막에 줄 바꿈이 계속 표시됩니다.
Qt 5.4부터 다음과 같이 작성할 수도 있습니다.
qDebug().nospace().noquote() << var1;
위의 답변 중 일부를 결합하여 사용할 수 있습니다.
qDebug() << qPrintable(var1);
주변 따옴표를 제거합니다.
나는 또한 따옴표 문제를 경험했습니다. 해결책은 QString()
스트림으로 파이프 하는 것이 아니라 대신하는 것 QString(...).toStdString().c_str()
입니다.
I've built myself a small convenience macro to easily get around this:
#define Q(string) (string).toStdString().c_str()
Now everytime you use a QString, do it like that:
qDebug() << Q(var1) << "=" << var2;
The file $(QTDIR)/src/corelib/io/qdebug.h contains almost all definitions for the debug output methods. One of them is:
inline QDebug &operator<<(const QString & t) { stream->ts << '\"' << t << '\"'; return maybeSpace(); }
So there is no "official" way to suppress the quotes, but you can of course change qdebug.h or use your own copy or a modified and renamed copy of the QDebug class.
Another way is to use your own message handler.
Hope this helps.
ReferenceURL : https://stackoverflow.com/questions/5209823/how-to-call-qdebug-without-the-appended-spaces-and-newline
'Programing' 카테고리의 다른 글
UIScrollView 내부에있는 UITextView에서 큰 텍스트가 잘림 (0) | 2020.12.28 |
---|---|
테이블 헤더보기에서 UISearchController가 표시하는 UISearchBar가 활성화되면 너무 멀리 애니메이션됩니다. (0) | 2020.12.28 |
구문 강조로 인해 Vim에서 끔찍한 지연이 발생합니다. (0) | 2020.12.28 |
intellij 아이디어에서 편집기 동작을 변경하는 방법 (0) | 2020.12.28 |
PySpark의 테이블 데이터 프레임을 CSV로 내보내는 방법은 무엇입니까? (0) | 2020.12.28 |