<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>채건닷컴</title>
		<link rel="alternate" type="text/html" hreflang="ko" href="https://chaegeon.com/"/>
	<link rel="self" type="application/atom+xml" href="https://chaegeon.com/atom"/>
	<updated>2026-11-14T03:09:34+09:00</updated>
	<id>https://chaegeon.com/atom</id>
	<generator>Rhymix</generator>
		<entry>
		<title>QUdpSocket::bind() :: UDP 수신 포트 준비하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86895"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86895#comment"/>		<id>https://chaegeon.com/study/86895</id>
		<published>2026-11-09T22:31:02+09:00</published>
		<updated>2026-11-09T22:31:02+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 UDP 데이터를 받으려면 먼저 로컬 주소와 포트에 bind()한다. TCP처럼 연결을 수립하는 단계가 아니라 수신할 소켓 주소를 정하는 단계다. 함수와 인수 읽기 address와 port 예제는 루프백 주소와 포트 0을 사용한다. 같은 컴퓨터에서만 접근하며 운영체제가 비어 있는 포트를 배정한다. bind 반환값 포트 사용 중이나 권한 문제로 실패할 수 있다. false면 errorString()을 확인하고 수신을 시작한 것으로 처리하지 않는다....</summary>
				</entry><entry>
		<title>QTcpSocket::connectToHost() :: 연결과 데이터 수신을 나누어 처리하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86892"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86892#comment"/>		<id>https://chaegeon.com/study/86892</id>
		<published>2026-11-09T02:43:35+09:00</published>
		<updated>2026-11-09T02:43:35+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 TCP 연결은 연결 요청과 실제 연결 완료가 다른 시점이다. connectToHost() 다음 줄에서 바로 연결됐다고 가정하지 않는다. 함수와 인수 읽기 host와 port 연결할 주소와 포트를 전달한다. 예제는 같은 컴퓨터 안에 임시 서버를 열고 운영체제가 배정한 포트로 연결한다. readyRead와 disconnected TCP는 바이트 스트림이다. 수신 시그널마다 현재 도착한 바이트를 모으고 이 예제에서는 연결 종료를 데이터 끝으로 삼아 출...</summary>
				</entry><entry>
		<title>QNetworkAccessManager::get() :: HTTP 응답을 비동기로 받기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86889"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86889#comment"/>		<id>https://chaegeon.com/study/86889</id>
		<published>2026-11-09T02:18:00+09:00</published>
		<updated>2026-11-09T02:18:00+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 HTTP 요청은 QNetworkAccessManager로 보낼 수 있다. GUI 스레드에서 응답이 올 때까지 반복해서 기다리지 않고 완료 시그널에서 결과를 읽는다. 함수와 인수 읽기 QNetworkRequest 대상 URL과 요청 옵션을 담는다. 예제는 전송 타임아웃을 설정하고 명령행 첫 인수로 다른 URL을 전달할 수 있게 했다. QNetworkReply 요청이 진행되는 동안의 응답 객체다. finished에서 네트워크 오류와 HTTP 상태를 확인하고 필요한 데이터...</summary>
				</entry><entry>
		<title>QProcess::start() :: 프로그램과 인수를 분리해 실행하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86886"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86886#comment"/>		<id>https://chaegeon.com/study/86886</id>
		<published>2026-11-09T00:15:18+09:00</published>
		<updated>2026-11-09T00:15:18+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 외부 프로그램을 실행할 때 프로그램 경로와 인수 목록을 분리해서 전달한다. 셸 명령 문자열 하나로 합치지 않으면 인용과 명령 삽입 문제를 줄일 수 있다. 함수와 인수 읽기 program과 arguments 실행 파일 경로와 QStringList 인수를 전달한다. 이 예제는 자기 프로그램을 --child 인수로 한 번 더 실행하므로 별도 도구 설치가 필요 없다. 출력과 종료 시그널 readyReadStandardOutput은 현재 도착한 표준 출력을 읽는 ...</summary>
				</entry><entry>
		<title>QObject::moveToThread() :: 작업 객체의 슬롯을 다른 스레드에서 실행하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86883"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86883#comment"/>		<id>https://chaegeon.com/study/86883</id>
		<published>2026-11-08T12:30:48+09:00</published>
		<updated>2026-11-08T12:30:48+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 이벤트를 받는 작업 객체를 별도 스레드로 옮기면 해당 객체의 슬롯을 그 스레드에서 처리할 수 있다. QThread 객체 자체를 작업 객체로 혼동하지 않는다. 함수와 인수 읽기 소속 스레드 moveToThread()는 QObject의 스레드 소속을 바꾼다. 부모가 있는 객체는 바로 옮길 수 없으므로 예제의 Worker는 부모 없이 만든다. 연결과 정리 시작 시그널을 작업 슬롯에 연결한다. 작업 결과는 메인 스레드의 context로 전달하고 스...</summary>
				</entry><entry>
		<title>QThread::create() :: 짧은 작업을 별도 스레드에서 실행하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86880"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86880#comment"/>		<id>https://chaegeon.com/study/86880</id>
		<published>2026-11-08T12:14:46+09:00</published>
		<updated>2026-11-08T12:14:46+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 시간이 걸리는 작업을 GUI 스레드 밖으로 옮길 때 QThread::create()로 함수 기반 작업을 만들 수 있다. 스레드 객체의 수명과 실제 실행 종료는 별도로 관리한다. 함수와 인수 읽기 함수 객체 새 스레드에서 실행할 람다나 함수를 넘긴다. 캡처한 객체가 작업이 끝날 때까지 살아 있는지 확인해야 한다. start()와 wait() create()는 QThread 객체를 만들고 start()가 실제 실행을 시작한다. 객체를 정리하기 전에는 작업이...</summary>
				</entry><entry>
		<title>QItemSelectionModel::selectionChanged() :: 선택된 행 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86877"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86877#comment"/>		<id>https://chaegeon.com/study/86877</id>
		<published>2026-11-08T11:10:32+09:00</published>
		<updated>2026-11-08T11:10:32+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 현재 커서가 있는 항목과 선택된 항목들은 다를 수 있다. 여러 행을 선택하는 화면에서는 selectionModel()에서 실제 선택 집합을 읽는다. 함수와 인수 읽기 selected와 deselected 시그널 인수는 이번 변경에서 추가되거나 해제된 범위다. 현재 선택 전체가 필요하면 selectionModel의 조회 함수를 사용한다. selectedRows(column) 지정한 열의 선택된 행 인덱스를 돌려준다. 행 단위 선택 모드와 함께 쓰면 한 행의 모든 ...</summary>
				</entry><entry>
		<title>QSortFilterProxyModel::setFilterFixedString() :: 원본을 유지하며 목록 거르기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86874"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86874#comment"/>		<id>https://chaegeon.com/study/86874</id>
		<published>2026-11-08T09:30:46+09:00</published>
		<updated>2026-11-08T09:30:46+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 검색 결과를 보여 줄 때 원본 목록에서 항목을 직접 지울 필요는 없다. 프록시 모델로 보이는 행만 고를 수 있다. 함수와 인수 읽기 sourceModel 실제 데이터를 가진 원본 모델이다. 뷰에는 원본이 아니라 프록시 모델을 연결한다. 고정 문자열 필터 setFilterFixedString()은 입력을 정규식 패턴이 아닌 일반 문자열로 취급한다. 예제는 0번 열에서 대소문자를 구분하지 않고 찾는다. 직접 실행하기 #include &lt;QApplication...</summary>
				</entry><entry>
		<title>QStandardItemModel::setItem() :: 표의 행과 열에 데이터 넣기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86871"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86871#comment"/>		<id>https://chaegeon.com/study/86871</id>
		<published>2026-11-07T22:48:36+09:00</published>
		<updated>2026-11-07T22:48:36+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 작은 표 데이터를 빠르게 구성할 때 QStandardItemModel을 사용할 수 있다. 셀마다 QStandardItem을 넣고 QTableView로 표시한다. 함수와 인수 읽기 row와 column 행과 열 인덱스는 0부터 시작한다. 표시용 헤더와 실제 데이터 셀의 위치를 구분한다. item 소유권 setItem()에 전달한 아이템은 모델이 소유한다. 같은 아이템 포인터를 여러 셀에 동시에 넣거나 따로 delete하지 않는다. 직접 실행하기 #include &lt;QApplicatio...</summary>
				</entry><entry>
		<title>QStringListModel::setStringList() :: 문자열 목록을 뷰에 전달하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86868"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86868#comment"/>		<id>https://chaegeon.com/study/86868</id>
		<published>2026-11-07T21:25:11+09:00</published>
		<updated>2026-11-07T21:25:11+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 모델과 뷰 구조에서는 데이터와 화면 위젯을 나누어 관리한다. 문자열 목록은 QStringListModel로 제공하고 QListView로 표시할 수 있다. 함수와 인수 읽기 strings 모델에 설정할 QStringList다. 전체 목록을 교체하는 함수이므로 선택 상태나 모델 인덱스에 미치는 영향도 고려한다. setModel() 뷰에 사용할 모델을 연결한다. 뷰에 모델을 연결했다고 모델의 소유권까지 자동으로 뷰로 넘어가는 것은 아니다. 직접 실행하기 ...</summary>
				</entry><entry>
		<title>QPropertyAnimation::start() :: QObject 속성 값을 시간에 따라 바꾸기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86865"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86865#comment"/>		<id>https://chaegeon.com/study/86865</id>
		<published>2026-11-07T20:46:30+09:00</published>
		<updated>2026-11-07T20:46:30+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 위젯 위치 같은 속성을 부드럽게 바꾸려면 타이머마다 좌표를 직접 계산하는 대신 속성 애니메이션을 사용할 수 있다. 대상 속성에 쓰기 가능한 Qt 속성이 있어야 한다. 함수와 인수 읽기 target과 propertyName 예제는 버튼의 pos 속성이다. 속성 이름은 대소문자를 포함해 정확히 지정하며 일반 C++ 멤버 변수 이름을 아무거나 전달하는 기능은 아니다. duration과 easing duration은 밀리초 단위다. easing은 시간에 따른...</summary>
				</entry><entry>
		<title>QShortcut::activated() :: 위젯에 키보드 동작 붙이기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86862"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86862#comment"/>		<id>https://chaegeon.com/study/86862</id>
		<published>2026-11-07T09:34:33+09:00</published>
		<updated>2026-11-07T09:34:33+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 메뉴 없이 간단한 키보드 동작을 추가할 때 QShortcut을 사용할 수 있다. 단축키가 어느 창이나 위젯에서 유효한지도 함께 지정한다. 함수와 인수 읽기 QKeySequence 실행할 키 조합이다. 예제는 Ctrl+L을 사용하며 운영체제의 표준 동작이 있다면 해당 StandardKey를 검토한다. shortcutContext WindowShortcut은 관련 창이 활성 상태일 때 적용된다. WidgetShortcut처럼 더 좁은 범위를 선택할 수도 있다. 직접 실행하기 #...</summary>
				</entry><entry>
		<title>QWidget::paintEvent() :: 위젯 안에 직접 그리기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86859"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86859#comment"/>		<id>https://chaegeon.com/study/86859</id>
		<published>2026-11-06T20:13:14+09:00</published>
		<updated>2026-11-06T20:13:14+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 표준 위젯만으로 표현하기 어려운 작은 상태 표시를 만들 때 paintEvent()를 재정의할 수 있다. 위젯에 직접 그리는 작업은 그리기 이벤트 안에서 수행한다. 함수와 인수 읽기 QPainter 대상 QPainter(this)는 현재 위젯에 그린다. 일반 버튼 클릭 함수 안에서 위젯용 QPainter를 임의로 열기보다 상태를 바꾸고 update()를 요청한다. 좌표와 영역 rect()는 위젯 내부 영역이다. adjusted()로 여백을 두고 펜과 브러시를 별...</summary>
				</entry><entry>
		<title>QObject::installEventFilter() :: 입력 이벤트를 먼저 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86856"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86856#comment"/>		<id>https://chaegeon.com/study/86856</id>
		<published>2026-11-06T08:06:50+09:00</published>
		<updated>2026-11-06T08:06:50+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 특정 위젯의 키 입력을 원래 처리보다 먼저 확인하고 싶을 때 이벤트 필터를 사용할 수 있다. 모든 이벤트를 가로채 버리지 않도록 반환값을 정확히 정한다. 함수와 인수 읽기 filterObject eventFilter()를 재정의한 QObject를 등록한다. 필터 객체와 감시할 객체는 같은 스레드에 있어야 한다. true와 false true를 돌려주면 해당 이벤트를 여기서 소비해 원래 객체로 보내지 않는다. 처리하지 않은 이벤트는 기본 구현으...</summary>
				</entry><entry>
		<title>QDialog::open() :: 중첩 이벤트 루프 없이 대화상자 열기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86853"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86853#comment"/>		<id>https://chaegeon.com/study/86853</id>
		<published>2026-11-06T07:45:42+09:00</published>
		<updated>2026-11-06T07:45:42+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 대화상자를 열고 결과를 시그널로 받으면 호출 함수 안에서 결과를 동기적으로 기다릴 필요가 없다. QDialog::open()은 즉시 돌아오는 비동기 API다. 함수와 인수 읽기 대화상자 수명 open() 뒤에 함수가 끝나므로 함수의 스택 지역 QDialog를 바로 버리는 코드는 맞지 않는다. 예제는 부모가 있는 힙 객체를 만들고 닫힐 때 정리한다. finished(int) 대화상자가 끝났을 때 결과 코드를 받는다. accept()는 Accepted로 끝내...</summary>
				</entry><entry>
		<title>QMessageBox::question() :: 확인 응답을 명시적으로 처리하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86850"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86850#comment"/>		<id>https://chaegeon.com/study/86850</id>
		<published>2026-11-06T07:29:20+09:00</published>
		<updated>2026-11-06T07:29:20+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 되돌리기 어려운 동작을 실행하기 전에 확인 응답을 받을 수 있다. 응답을 단순한 bool처럼 처리하지 말고 어떤 버튼을 눌렀는지 비교한다. 함수와 인수 읽기 buttons QMessageBox::Yes | QMessageBox::No처럼 허용할 버튼을 정한다. 반환값은 선택한 StandardButton이다. defaultButton 엔터 키로 실행될 기본 버튼이다. 위험한 동작에서는 무심코 동의가 선택되지 않도록 기본값을 신중히 정한다. 직접 실행하기 #include ...</summary>
				</entry><entry>
		<title>QFileDialog::getOpenFileName() :: 파일 선택과 취소 구분하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86847"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86847#comment"/>		<id>https://chaegeon.com/study/86847</id>
		<published>2026-11-06T06:54:17+09:00</published>
		<updated>2026-11-06T06:54:17+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 파일 선택 대화상자는 경로를 고르는 도구다. 사용자가 선택한 파일을 실제로 읽을 수 있는지는 QFile로 열 때 다시 확인한다. 함수와 인수 읽기 parent와 caption 대화상자의 부모 창과 제목을 전달한다. 부모를 지정하면 창의 관계와 모달 동작을 관리하기 쉽다. filter와 반환값 텍스트 (*.txt);;모든 파일 (*)처럼 여러 필터를 지정할 수 있다. 취소했을 때는 빈 QString이 돌아오므로 빈 경로로 파일을 열지 않는다. 직...</summary>
				</entry><entry>
		<title>QMenu::popup() :: 우클릭 위치에 메뉴 표시하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86844"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86844#comment"/>		<id>https://chaegeon.com/study/86844</id>
		<published>2026-11-05T23:36:24+09:00</published>
		<updated>2026-11-05T23:36:24+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 사용자 클릭 위치에 메뉴를 띄우려면 위젯 좌표와 화면 전체 좌표를 구분해야 한다. QMenu::popup()은 전역 좌표를 받는다. 함수와 인수 읽기 position 메뉴를 표시할 화면 좌표다. 위젯 안에서 받은 QPoint를 mapToGlobal()로 변환해 전달한다. 비동기 표시 popup()은 메뉴를 표시하고 바로 돌아온다. 메뉴 객체가 호출 함수의 지역 변수로 즉시 사라지지 않게 수명을 관리한다. 직접 실행하기 #include &lt;QApplication&gt; #in...</summary>
				</entry><entry>
		<title>QStatusBar::showMessage() :: 잠깐 보이는 안내 표시하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86841"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86841#comment"/>		<id>https://chaegeon.com/study/86841</id>
		<published>2026-11-05T21:58:28+09:00</published>
		<updated>2026-11-05T21:58:28+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 저장 결과나 현재 상태를 간단히 안내할 때 상태 표시줄을 사용할 수 있다. 반드시 사용자가 확인해야 하는 오류와 일시 안내를 구분한다. 함수와 인수 읽기 message와 timeout 두 번째 인수는 밀리초 단위 표시 시간이다. 0이면 자동으로 지우는 시간을 지정하지 않은 상태이며 다른 메시지나 clearMessage()로 바뀔 수 있다. 영구 위젯 연결 상태처럼 계속 보여 줄 항목은 addPermanentWidget()으로 둘 수 있다. 일시 메시...</summary>
				</entry><entry>
		<title>QAction::triggered() :: 메뉴와 단축키를 같은 동작에 연결하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86838"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86838#comment"/>		<id>https://chaegeon.com/study/86838</id>
		<published>2026-11-05T21:30:30+09:00</published>
		<updated>2026-11-05T21:30:30+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 메뉴와 도구 모음과 단축키가 같은 작업을 실행한다면 QAction으로 동작을 묶을 수 있다. 각 화면 요소에 같은 처리 코드를 복사할 필요가 없다. 함수와 인수 읽기 text와 parent 사용자에게 보일 이름과 소유 부모를 지정한다. QAction은 동작을 나타내며 자체가 화면에 그려지는 버튼은 아니다. triggered와 checked 동작이 실행될 때 triggered가 발생한다. 체크 가능한 액션이면 checked 인수로 그 상태를 받을 수 있다....</summary>
				</entry><entry>
		<title>QMainWindow::setCentralWidget() :: 본문 위젯 설치하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86835"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86835#comment"/>		<id>https://chaegeon.com/study/86835</id>
		<published>2026-11-05T21:06:15+09:00</published>
		<updated>2026-11-05T21:06:15+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 QMainWindow에는 메뉴와 도구 모음 및 상태 표시줄을 위한 구조가 있다. 본문 영역에는 centralWidget을 설치한다. 함수와 인수 읽기 widget 본문으로 사용할 QWidget이다. 입력란이 여러 개라면 컨테이너 QWidget에 레이아웃을 만들고 그 컨테이너를 전달한다. 소유권 QMainWindow가 중앙 위젯을 소유한다. 기존 중앙 위젯을 교체하는 경우 이전 위젯의 수명도 고려해야 한다. 직접 실행하기 #include &lt;QApplication&gt; #includ...</summary>
				</entry><entry>
		<title>QScrollArea::setWidget() :: 긴 설정 화면에 스크롤 붙이기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86832"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86832#comment"/>		<id>https://chaegeon.com/study/86832</id>
		<published>2026-11-05T01:28:11+09:00</published>
		<updated>2026-11-05T01:28:11+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 한 화면에 들어가지 않는 설정 항목은 콘텐츠 위젯을 만들고 QScrollArea에 넣을 수 있다. 스크롤 영역 자체에 입력 위젯을 계속 직접 붙이는 방식과 구분한다. 함수와 인수 읽기 콘텐츠 QWidget setWidget()에 전달하는 위젯 하나가 스크롤 대상이다. 여러 항목은 이 위젯 안에 레이아웃으로 배치한다. widgetResizable true면 스크롤 영역 크기에 맞게 콘텐츠를 조절하려고 한다. 콘텐츠의 최소 크기가 더 크면 필요한 방...</summary>
				</entry><entry>
		<title>QSplitter::addWidget() :: 사용자가 영역 크기를 조절하게 하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/82673"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/82673#comment"/>		<id>https://chaegeon.com/study/82673</id>
		<published>2026-11-04T07:53:32+09:00</published>
		<updated>2026-11-04T07:53:32+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 왼쪽 목록과 오른쪽 편집 영역의 비율을 사용자가 바꾸게 하려면 QSplitter를 사용할 수 있다. 고정 비율 레이아웃과 달리 경계 손잡이를 드래그할 수 있다. 함수와 인수 읽기 orientation Qt::Horizontal이면 좌우로 나누고 Qt::Vertical이면 위아래로 나눈다. 위젯을 추가한 순서가 배치 순서가 된다. stretch factor 초기 공간 배분에 영향을 준다. 단순히 최종 크기를 정확히 1대 2 픽셀로 강제하는 설정이라고 생각하지...</summary>
				</entry><entry>
		<title>QTabWidget::addTab() :: 탭 페이지와 제목 연결하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86829"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86829#comment"/>		<id>https://chaegeon.com/study/86829</id>
		<published>2026-11-04T02:11:35+09:00</published>
		<updated>2026-11-04T02:11:35+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 여러 화면을 탭으로 나누려면 QTabWidget에 페이지 위젯을 추가한다. 탭의 제목과 실제 내용을 그리는 위젯은 다른 대상이다. 함수와 인수 읽기 page와 label 페이지로 사용할 QWidget 포인터와 탭 표시 문자열을 전달한다. addTab()은 추가한 탭의 인덱스를 돌려준다. currentChanged 현재 탭이 바뀐 뒤 새 인덱스를 받는다. 탭을 제거해 선택이 없어지는 경우 등에서는 유효한 범위인지 확인한다. 직접 실행하기 #include ...</summary>
				</entry><entry>
		<title>QStackedWidget::setCurrentIndex() :: 한 자리에서 화면 전환하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86826"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86826#comment"/>		<id>https://chaegeon.com/study/86826</id>
		<published>2026-11-04T01:14:29+09:00</published>
		<updated>2026-11-04T01:14:29+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 설정 메뉴에 따라 본문 화면만 바꾸려면 QStackedWidget을 사용할 수 있다. 여러 페이지를 보관하지만 일반적으로 현재 페이지 하나만 보여 준다. 함수와 인수 읽기 index addWidget()으로 등록한 페이지의 인덱스다. 페이지가 없거나 잘못된 인덱스를 전달하지 않도록 범위를 확인한다. 페이지 소유권 추가한 페이지는 스택 위젯이 소유한다. 페이지를 제거하는 동작과 페이지 객체를 삭제하는 동작은 구분해야 한다. 직접 ...</summary>
				</entry><entry>
		<title>QSlider::valueChanged() :: 슬라이더와 숫자 입력 동기화하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86823"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86823#comment"/>		<id>https://chaegeon.com/study/86823</id>
		<published>2026-11-04T00:49:02+09:00</published>
		<updated>2026-11-04T00:49:02+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 슬라이더와 숫자 입력란이 같은 값을 나타내게 할 수 있다. 두 방향으로 연결하더라도 값이 실제로 바뀔 때만 신호가 나오는 동작을 이해하면 반복 호출을 피하기 쉽다. 함수와 인수 읽기 정수 범위 QSlider는 정수 값을 다룬다. 소수 단위가 필요하면 내부 정수 값과 표시 값 사이의 변환 규칙을 정한다. tracking 기본 tracking에서는 드래그 중에도 값 변경 알림을 받는다. 드래그를 마친 뒤에만 무거운 처리를 하고 싶다...</summary>
				</entry><entry>
		<title>QProgressBar::setRange() :: 진행률과 대기 상태 표시하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86820"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86820#comment"/>		<id>https://chaegeon.com/study/86820</id>
		<published>2026-11-04T00:24:59+09:00</published>
		<updated>2026-11-04T00:24:59+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 작업 전체 크기를 아는 경우와 아직 모르는 경우는 진행 표시가 달라야 한다. 실제 진행률을 모르는데 임의로 퍼센트를 올리는 방식은 피한다. 함수와 인수 읽기 minimum과 maximum 범위를 0부터 100으로 정하면 value를 그 사이의 진행값으로 표시한다. 작업 개수가 250개라면 최대값을 250으로 두고 실제 완료 개수를 넣을 수도 있다. 0과 0 범위 최소값과 최대값을 모두 0으로 지정하면 전체 진행률을 알 수 없는 busy 표...</summary>
				</entry><entry>
		<title>QTextEdit::setHtml() :: 리치 텍스트와 외부 문자열 섞기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86817"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86817#comment"/>		<id>https://chaegeon.com/study/86817</id>
		<published>2026-11-03T22:22:06+09:00</published>
		<updated>2026-11-03T22:22:06+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 굵은 글씨나 링크가 있는 문서를 보여 줄 때 QTextEdit에 HTML을 설정할 수 있다. 다만 웹 브라우저 전체와 같은 HTML 엔진은 아니다. 함수와 인수 읽기 html Qt의 리치 텍스트가 지원하는 HTML 일부를 입력한다. 일반 텍스트로 보여 줄 목적이라면 setPlainText()를 사용하는 편이 명확하다. toHtmlEscaped() 사용자가 입력한 문자열을 HTML의 텍스트 위치에 넣을 때 꺾쇠괄호와 앰퍼샌드 등을 이스케이프한다. 전체 HTML ...</summary>
				</entry><entry>
		<title>QPlainTextEdit::appendPlainText() :: 로그를 줄 단위로 추가하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86814"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86814#comment"/>		<id>https://chaegeon.com/study/86814</id>
		<published>2026-11-03T22:02:14+09:00</published>
		<updated>2026-11-03T22:02:14+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 실행 로그를 보여 줄 때 일반 텍스트 편집기를 사용할 수 있다. appendPlainText()는 기존 내용 뒤에 새 문단을 추가한다. 함수와 인수 읽기 text 추가할 일반 문자열이다. HTML 태그를 넘겨도 리치 텍스트로 해석하는 기능이 아니다. maximumBlockCount 보관할 문단 수를 제한한다. 오래된 로그가 계속 쌓여 메모리와 화면 처리가 느려지는 것을 줄일 수 있다. 문단 수와 원시 바이트 수 제한은 다르다. 직접 실행하기 #inc...</summary>
				</entry><entry>
		<title>QLabel::setPixmap() :: 이미지 표시와 원본 크기 구분하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86811"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86811#comment"/>		<id>https://chaegeon.com/study/86811</id>
		<published>2026-11-03T21:07:17+09:00</published>
		<updated>2026-11-03T21:07:17+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 이미지를 라벨에 표시할 때 원본 이미지와 표시할 크기를 나누어 관리하는 편이 낫다. 축소된 이미지를 다시 확대하면 원본 정보가 돌아오지 않는다. 함수와 인수 읽기 QPixmap GUI에서 표시할 픽셀 이미지를 전달한다. 이미지 파일을 읽는 경우에는 로딩 결과가 null인지 먼저 확인한다. scaled() 옵션 KeepAspectRatio는 가로세로 비율을 유지한다. SmoothTransformation은 축소나 확대 때 부드러운 변환을 요청하며 계산 ...</summary>
				</entry><entry>
		<title>QLabel::setText() :: 일반 문자열과 HTML 표시 구분하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86808"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86808#comment"/>		<id>https://chaegeon.com/study/86808</id>
		<published>2026-11-03T20:27:49+09:00</published>
		<updated>2026-11-03T20:27:49+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 QLabel은 일반 문자열뿐 아니라 일부 HTML 형식도 표시할 수 있다. 사용자 입력을 그대로 보여 줄 때는 자동 해석을 원하지 않을 수 있다. 함수와 인수 읽기 textFormat Qt::PlainText는 입력을 일반 문자열로 표시한다. Qt::RichText는 지원하는 리치 텍스트로 해석한다. 기본 AutoText의 추측에 의존할 필요가 없는 경우 형식을 명시한다. wordWrap 긴 문장을 위젯 폭에 맞춰 나눌지 지정한다. 줄바꿈 설정과 위젯의 실제 너...</summary>
				</entry><entry>
		<title>QComboBox::currentIndexChanged() :: 선택 변경 시점 처리하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86805"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86805#comment"/>		<id>https://chaegeon.com/study/86805</id>
		<published>2026-11-03T19:07:57+09:00</published>
		<updated>2026-11-03T19:07:57+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 콤보박스의 선택이 달라졌을 때 currentIndexChanged를 받을 수 있다. 사용자 클릭으로 바뀐 경우만 알리는 시그널은 아니다. 함수와 인수 읽기 index 변경 뒤의 항목 인덱스다. 항목이 없어지면 -1이 올 수 있으므로 범위를 먼저 확인한다. activated()와의 차이 currentIndexChanged는 코드의 setCurrentIndex()에도 반응한다. 사용자가 항목을 실행한 동작을 구분해야 한다면 activated()를 검토한다. 직접 실행하기 #inc...</summary>
				</entry><entry>
		<title>QComboBox::currentData() :: 표시 이름 대신 실제 선택값 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86802"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86802#comment"/>		<id>https://chaegeon.com/study/86802</id>
		<published>2026-11-01T21:56:46+09:00</published>
		<updated>2026-11-01T21:56:46+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 콤보박스의 화면 문구와 저장할 값은 다를 수 있다. 사용자가 보는 이름이 바뀌어도 내부 식별자를 유지하려면 항목 데이터에 값을 넣는다. 함수와 인수 읽기 userData addItem(text, userData)의 두 번째 인수다. 기본적으로 Qt::UserRole에 QVariant로 저장된다. role currentData()는 기본 역할의 데이터를 읽는다. 다른 역할에 저장한 값이 필요하면 그 역할 번호를 명시한다. 직접 실행하기 #include &lt;QApplication&gt; #i...</summary>
				</entry><entry>
		<title>QDoubleSpinBox::setDecimals() :: 소수 자릿수와 반올림 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86799"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86799#comment"/>		<id>https://chaegeon.com/study/86799</id>
		<published>2026-11-01T21:22:15+09:00</published>
		<updated>2026-11-01T21:22:15+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 소수 입력란의 자릿수는 화면 모양뿐 아니라 보관하는 값의 정밀도에도 영향을 준다. decimals를 나중에 바꾸면 기존 값이 반올림될 수 있다. 함수와 인수 읽기 decimals 소수점 아래 자릿수다. 예제에서는 2로 지정해 1.239가 1.24처럼 표시되고 값에도 반영되는 것을 확인한다. singleStep과 locale 스텝 간격과 소수점 표시는 별도 설정이다. locale은 소수점 기호와 숫자 표시 규칙에 영향을 준다. 직접 실행하기 #inclu...</summary>
				</entry><entry>
		<title>QSpinBox::valueChanged() :: 범위 안의 정수 변경 받기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86796"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86796#comment"/>		<id>https://chaegeon.com/study/86796</id>
		<published>2026-11-01T20:40:39+09:00</published>
		<updated>2026-11-01T20:40:39+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 정해진 범위의 정수를 입력받으려면 QSpinBox가 편리하다. text()를 다시 숫자로 파싱하기보다 valueChanged(int)와 value()를 사용한다. 함수와 인수 읽기 minimum과 maximum setRange()로 허용 범위를 정한다. setValue()에 범위 밖의 값을 주면 범위 안으로 제한된다. singleStep 화살표나 스텝 동작의 증가량이다. 직접 입력한 값이 모두 이 간격의 배수여야 한다는 검증 규칙과는 다르다. 직접 실행하기 #include &lt;QApp...</summary>
				</entry><entry>
		<title>QLineEdit::setValidator() :: 정수 입력 범위 검사하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86793"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86793#comment"/>		<id>https://chaegeon.com/study/86793</id>
		<published>2026-11-01T19:06:28+09:00</published>
		<updated>2026-11-01T19:06:28+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 숫자 입력란을 만들 때 입력 도중의 상태와 제출 가능한 상태를 나누어야 한다. validator는 입력 과정까지 고려해 판단한다. 함수와 인수 읽기 validator 객체 예제는 1부터 100까지의 정수를 받는 QIntValidator다. edit를 부모로 지정해 입력란이 삭제될 때 validator도 정리되게 했다. hasAcceptableInput() 현재 내용이 최종적으로 허용되는 입력인지 확인한다. 중간 입력 상태와 최종 제출 가능 상태가 같다고 생각하...</summary>
				</entry><entry>
		<title>QLineEdit::textEdited() :: 사용자 편집만 구분해 받기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86790"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86790#comment"/>		<id>https://chaegeon.com/study/86790</id>
		<published>2026-11-01T09:30:08+09:00</published>
		<updated>2026-11-01T09:30:08+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 검색어를 사용자가 수정할 때만 검색을 예약하고 싶은 경우가 있다. textChanged와 textEdited의 차이를 이용하면 프로그램의 초기값 설정을 구분할 수 있다. 함수와 인수 읽기 textEdited 사용자가 내용을 편집했을 때 발생한다. setText()로 값을 바꾸는 경우에는 발생하지 않는다. textChanged 사용자 편집뿐 아니라 코드의 값 변경에도 발생한다. 두 시그널을 같은 것으로 보고 연결하면 초기화 중 불필요한 작업이 실행...</summary>
				</entry><entry>
		<title>QLineEdit::setText() :: 코드로 입력값 채우기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86787"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86787#comment"/>		<id>https://chaegeon.com/study/86787</id>
		<published>2026-10-31T16:56:03+09:00</published>
		<updated>2026-10-31T16:56:03+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 기존 설정을 편집 화면에 불러올 때 setText()로 입력란을 채울 수 있다. 사용자가 직접 타이핑한 변경과는 알림 종류가 다르다. 함수와 인수 읽기 text 입력란에 넣을 QString이다. 기존 내용을 바꾼다. 현재 커서 위치에 일부 문자열만 넣는 insert()와 구분한다. maxLength 최대 길이보다 긴 문자열을 설정하면 잘릴 수 있다. 숫자 validator 같은 입력 검증 규칙과 길이 제한은 서로 다르다. 직접 실행하기 #include &lt;QA...</summary>
				</entry><entry>
		<title>QLineEdit::text() :: 입력값을 읽고 빈 문자열 검사하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86784"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86784#comment"/>		<id>https://chaegeon.com/study/86784</id>
		<published>2026-10-31T15:27:31+09:00</published>
		<updated>2026-10-31T15:27:31+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 QLineEdit에서 실제 입력값은 text()로 읽는다. 안내용 placeholder와 사용자가 입력한 문자열은 다르다. 함수와 인수 읽기 text() 현재 내용을 QString으로 돌려준다. echoMode가 Password여도 실제 값은 마스킹되지 않은 문자열이므로 로그에 남기지 않도록 한다. trimmed() 적용 예제의 이름 입력은 앞뒤 공백을 무시한다. 공백이 데이터인 입력에는 같은 규칙을 무조건 적용하지 않는다. 직접 실행하기 #include &lt;QApplica...</summary>
				</entry><entry>
		<title>QButtonGroup::idClicked() :: 라디오 버튼을 번호로 구분하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86781"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86781#comment"/>		<id>https://chaegeon.com/study/86781</id>
		<published>2026-10-31T13:52:16+09:00</published>
		<updated>2026-10-31T13:52:16+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 여러 라디오 버튼 중 어떤 항목을 골랐는지 숫자 ID로 처리할 수 있다. 화면의 번역 문구를 비교하는 것보다 안정적이다. 함수와 인수 읽기 버튼과 ID addButton(button, id)로 버튼에 정수 ID를 연결한다. 직접 지정하는 ID는 중복되지 않게 관리하고 특별 값인 -1을 선택값으로 사용하지 않는다. exclusive 배타적 그룹에서는 한 항목만 선택한다. 초기값이 필요하면 그룹에 넣은 뒤 하나를 명시적으로 체크한다. 직접 실...</summary>
				</entry><entry>
		<title>QCheckBox::toggled() :: 선택 여부를 bool로 받기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86778"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86778#comment"/>		<id>https://chaegeon.com/study/86778</id>
		<published>2026-10-30T23:36:21+09:00</published>
		<updated>2026-10-30T23:36:21+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 켜기와 끄기 두 가지 상태를 받는 체크박스는 toggled(bool)로 처리할 수 있다. 클릭 여부가 아니라 실제 체크 상태가 바뀌는 시그널이다. 함수와 인수 읽기 checked true면 선택 상태이고 false면 해제 상태다. 코드에서 setChecked()로 값을 바꿔도 상태가 달라지면 시그널이 발생한다. 삼중 상태 부분 선택까지 구분해야 한다면 bool만으로는 충분하지 않다. Qt 버전에 맞는 체크 상태 시그널과 Qt::CheckState를 사용한...</summary>
				</entry><entry>
		<title>QPushButton::clicked() :: 체크 상태와 클릭 동작 구분하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86775"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86775#comment"/>		<id>https://chaegeon.com/study/86775</id>
		<published>2026-10-30T23:03:29+09:00</published>
		<updated>2026-10-30T23:03:29+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 QPushButton은 일반 실행 버튼과 체크 가능한 버튼으로 사용할 수 있다. clicked는 사용자가 버튼을 실행한 동작이고 체크 상태 변경 자체와는 다르다. 함수와 인수 읽기 checked 인수 체크 가능한 버튼에서는 클릭 뒤의 체크 상태가 bool로 전달된다. 일반 버튼에서는 이 값을 업무 상태처럼 사용하지 않는다. setChecked()와 clicked setChecked()는 체크 상태를 바꾸지만 clicked 시그널을 발생시키는 호출은 아니다. 프로...</summary>
				</entry><entry>
		<title>QFormLayout::addRow() :: 라벨과 입력란을 한 행으로 묶기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86772"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86772#comment"/>		<id>https://chaegeon.com/study/86772</id>
		<published>2026-10-30T22:38:34+09:00</published>
		<updated>2026-10-30T22:38:34+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 이름과 나이처럼 라벨과 입력란이 반복되는 화면은 QFormLayout으로 만들 수 있다. 좌우 열과 라벨의 연결을 직접 관리하는 양이 줄어든다. 함수와 인수 읽기 labelText와 field 문자열 라벨과 입력 위젯을 넘기는 오버로드다. &amp;를 넣은 라벨은 키보드 접근용 mnemonic을 지정할 수 있다. RowWrapPolicy 화면 폭이 부족할 때 행을 나누는 정책을 지정한다. 고정된 두 열만 가정하면 작은 화면에서 입력란이 지나치게 좁아질 ...</summary>
				</entry><entry>
		<title>QGridLayout::addWidget() :: 행과 열 및 병합 영역 지정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86769"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86769#comment"/>		<id>https://chaegeon.com/study/86769</id>
		<published>2026-10-30T22:02:35+09:00</published>
		<updated>2026-10-30T22:02:35+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 여러 입력란의 열을 맞추려면 QGridLayout을 사용할 수 있다. 행과 열 번호는 0부터 시작한다. 함수와 인수 읽기 row와 column 위젯을 놓을 시작 칸이다. 두 위젯을 의도 없이 같은 칸에 겹쳐 넣지 않는다. rowSpan과 columnSpan 해당 위젯이 차지할 행과 열의 개수다. 끝 행 번호나 끝 열 번호를 넣는 자리가 아니다. 직접 실행하기 #include &lt;QApplication&gt; #include &lt;QDebug&gt; #include &lt;QWidget&gt; #include &lt;QGridLayout&gt; ...</summary>
				</entry><entry>
		<title>QHBoxLayout::addStretch() :: 버튼을 오른쪽으로 밀기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86766"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86766#comment"/>		<id>https://chaegeon.com/study/86766</id>
		<published>2026-10-30T19:48:00+09:00</published>
		<updated>2026-10-30T19:48:00+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 상태 문구는 왼쪽에 두고 실행 버튼은 오른쪽에 붙이고 싶을 때 늘어나는 빈 공간을 사이에 넣을 수 있다. 고정 폭 공백을 여러 개 넣을 필요가 없다. 함수와 인수 읽기 stretch 값 addStretch(1)은 남는 공간을 받을 신축 공간을 추가한다. 같은 레이아웃의 다른 stretch와 비교해 상대적인 비율로 작동한다. 삽입 위치 stretch를 추가한 위치가 중요하다. 왼쪽 위젯과 오른쪽 위젯 사이에 넣으면 두 영역을 밀어 나눈다. ...</summary>
				</entry><entry>
		<title>QVBoxLayout::addWidget() :: 위에서 아래로 위젯 배치하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86763"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86763#comment"/>		<id>https://chaegeon.com/study/86763</id>
		<published>2026-10-29T22:31:52+09:00</published>
		<updated>2026-10-29T22:31:52+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 창 크기에 맞춰 위젯을 자동 배치하려면 좌표를 직접 나열하기보다 레이아웃을 사용한다. QVBoxLayout은 추가한 순서대로 세로로 배치한다. 함수와 인수 읽기 widget 레이아웃에 넣을 위젯 포인터다. 부모 위젯에 설치된 레이아웃에 추가하면 위젯도 그 부모 아래에 배치된다. stretch와 alignment stretch는 같은 방향의 남는 공간 배분에 사용한다. alignment는 배치 공간 안에서의 정렬이며 크기 확장과 같은 뜻이 아니다...</summary>
				</entry><entry>
		<title>QWidget::setSizePolicy() :: 남는 공간을 받을 위젯 정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86760"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86760#comment"/>		<id>https://chaegeon.com/study/86760</id>
		<published>2026-10-29T01:38:54+09:00</published>
		<updated>2026-10-29T01:38:54+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 레이아웃은 위젯의 크기 힌트와 크기 정책을 보고 공간을 나눈다. setSizePolicy()는 현재 픽셀 크기를 직접 정하는 명령이 아니다. 함수와 인수 읽기 수평 정책과 수직 정책 첫 인수는 수평 방향이고 두 번째는 수직 방향이다. 입력란은 가로로 늘리되 높이는 유지하는 식으로 방향마다 다르게 지정할 수 있다. Expanding과 Fixed Expanding은 남는 공간을 받도록 의사를 표시한다. Fixed는 해당 방향의 크기 힌트를 유지하려...</summary>
				</entry><entry>
		<title>QWidget::setMinimumSize() :: 창을 너무 작게 줄이지 못하게 하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86757"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86757#comment"/>		<id>https://chaegeon.com/study/86757</id>
		<published>2026-10-28T23:50:07+09:00</published>
		<updated>2026-10-28T23:50:07+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 창을 지나치게 줄이면 버튼이나 입력란이 읽기 어려워질 수 있다. 최소 크기와 현재 크기를 같은 설정으로 생각하지 않는 것이 중요하다. 함수와 인수 읽기 width와 height setMinimumSize(360, 180)은 위젯의 최소 너비와 높이를 지정한다. 최대 크기를 정하는 함수는 아니다. resize()와의 차이 resize()는 현재 크기를 요청한다. 최소 크기를 설정해 두면 사용자가 줄이거나 코드에서 resize()할 때도 그 제약이 반영된다...</summary>
				</entry><entry>
		<title>QWidget::setVisible() :: 선택에 따라 상세 영역 숨기기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86754"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86754#comment"/>		<id>https://chaegeon.com/study/86754</id>
		<published>2026-10-28T23:26:32+09:00</published>
		<updated>2026-10-28T23:26:32+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 고급 설정처럼 평소에는 필요 없는 영역을 접어 둘 때 setVisible()을 사용할 수 있다. 숨겨진 객체가 삭제되는 것은 아니다. 함수와 인수 읽기 visible true면 표시를 요청하고 false면 숨긴다. 부모 창이 숨겨져 있으면 자식을 visible로 바꿔도 독립적으로 화면에 나타나지 않는다. 레이아웃 공간 일반적으로 숨겨진 위젯은 레이아웃의 배치 대상에서 빠진다. 공간을 유지하도록 설정한 QSizePolicy가 있으면 동작이 다를...</summary>
				</entry><entry>
		<title>QWidget::setEnabled() :: 화면을 남겨 두고 입력만 막기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86751"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86751#comment"/>		<id>https://chaegeon.com/study/86751</id>
		<published>2026-10-28T23:16:05+09:00</published>
		<updated>2026-10-28T23:16:05+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 아직 실행할 수 없는 버튼을 숨기지 않고 비활성화해 둘 수 있다. setEnabled(false)는 위젯을 보이지 않게 하는 함수가 아니다. 함수와 인수 읽기 enabled true면 활성화하고 false면 일반적인 사용자 입력을 받지 않는 상태로 바꾼다. 비활성화된 모습은 운영체제 스타일에 따라 다를 수 있다. 부모의 영향 부모 위젯이 비활성화되면 자식도 실질적으로 비활성 상태가 된다. 자식만 다시 활성화해 부모의 비활성 상태를 무...</summary>
				</entry><entry>
		<title>QWidget::show() :: 부모 창과 자식 위젯 표시하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86748"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86748#comment"/>		<id>https://chaegeon.com/study/86748</id>
		<published>2026-10-28T22:47:16+09:00</published>
		<updated>2026-10-28T22:47:16+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt Widgets에서 자식 위젯을 만들었다고 최상위 창까지 자동으로 나타나는 것은 아니다. 부모 창을 show()로 표시해야 화면에 올라온다. 함수와 인수 읽기 최상위 위젯 부모가 없는 QWidget은 독립된 창으로 동작한다. 그 안에 놓은 QLabel 같은 자식은 부모의 표시 상태에 영향을 받는다. 표시 요청 show()는 창을 표시하도록 요청한다. 화면에 그려지는 작업과 창 시스템의 처리는 이벤트 루프에서 이어진다. 직접 실행하기 #incl...</summary>
				</entry><entry>
		<title>QHash::contains() :: 키 존재 여부와 값 조회 나누기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86745"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86745#comment"/>		<id>https://chaegeon.com/study/86745</id>
		<published>2026-10-28T19:31:37+09:00</published>
		<updated>2026-10-28T19:31:37+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 키로 빠르게 값을 찾을 때 QHash를 사용할 수 있다. contains()는 키가 있는지 알려 주며 값이 0인지 여부와는 다르다. 함수와 인수 읽기 key 해시와 동등 비교로 찾는 키다. 같은 키를 다시 insert()하면 그 키의 값이 갱신된다. constFind() 존재 확인 뒤 값도 필요하면 constFind()로 한 번 찾아 반복자를 사용하는 방법이 있다. cend()와 비교한 뒤 value()를 읽는다. 직접 실행하기 #include &lt;QCoreApplication&gt; #inclu...</summary>
				</entry><entry>
		<title>QMap::value() :: 없는 키를 추가하지 않고 값 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86742"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86742#comment"/>		<id>https://chaegeon.com/study/86742</id>
		<published>2026-10-27T20:47:21+09:00</published>
		<updated>2026-10-27T20:47:21+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 QMap에서 키를 조회할 때 value()와 쓰기 가능한 operator[]는 동작이 다르다. 조회만 할 코드에서 목록에 새 키를 만들지 않도록 구분한다. 함수와 인수 읽기 key와 defaultValue 찾는 키가 없으면 지정한 기본값을 돌려준다. 기본값을 돌려주는 것만으로 키가 지도에 추가되지는 않는다. 키의 정렬 QMap은 키 순서로 정렬된 구조다. 삽입한 순서가 아니라 키 비교 규칙에 따른 순서로 순회한다. 직접 실행하기 #include &lt;QCo...</summary>
				</entry><entry>
		<title>QList::append() :: 목록 끝에 값 추가하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86739"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86739#comment"/>		<id>https://chaegeon.com/study/86739</id>
		<published>2026-10-27T08:44:02+09:00</published>
		<updated>2026-10-27T08:44:02+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 가변 길이 목록에 값을 쌓을 때 QList를 사용할 수 있다. append()는 끝에 새 항목을 추가한다. 함수와 인수 읽기 value 목록의 원소 형식에 맞는 값을 전달한다. 예제의 QList&lt;int&gt;에는 정수를 저장한다. 크기와 인덱스 추가한 뒤 size()가 증가한다. 인덱스는 0부터 size()-1까지이며 유효하지 않은 인덱스에 접근하지 않는다. 직접 실행하기 #include &lt;QCoreApplication&gt; #include &lt;QDebug&gt; #include &lt;QList&gt; int main(in...</summary>
				</entry><entry>
		<title>QVariant::toInt() :: 값의 변환 성공 여부 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86736"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86736#comment"/>		<id>https://chaegeon.com/study/86736</id>
		<published>2026-10-27T08:32:58+09:00</published>
		<updated>2026-10-27T08:32:58+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 QVariant는 여러 형식의 값을 담을 수 있다. 같은 toInt()를 호출해도 담겨 있는 형식과 실제 내용에 따라 변환 결과가 달라진다. 함수와 인수 읽기 ok 포인터 변환에 성공했는지 받는다. 실패와 정상 값 0을 구분하려면 반환 정수만 검사하지 않는다. isValid()와 canConvert() isValid()는 유효한 값이 들어 있는지 확인한다. canConvert&lt;int&gt;()는 형식 수준의 변환 가능성을 보며 특정 문자열이 숫자로 읽힌다는 보장과는 ...</summary>
				</entry><entry>
		<title>QJsonDocument::toJson() :: JSON 객체를 UTF-8로 저장하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86733"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86733#comment"/>		<id>https://chaegeon.com/study/86733</id>
		<published>2026-10-27T07:56:19+09:00</published>
		<updated>2026-10-27T07:56:19+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 JSON을 만들 때 따옴표와 쉼표를 직접 문자열로 이어 붙이면 이스케이프 오류가 나기 쉽다. 객체와 배열을 구성한 다음 toJson()으로 직렬화한다. 함수와 인수 읽기 Indented와 Compact Indented는 사람이 읽기 좋은 들여쓰기를 넣는다. Compact는 불필요한 공백을 줄인다. 두 형식이 담는 데이터의 의미는 같다. QByteArray 반환 반환값은 UTF-8 JSON 바이트다. 파일이나 네트워크에는 이 바이트 배열과 바이트 길이를 사용...</summary>
				</entry><entry>
		<title>QJsonDocument::fromJson() :: JSON 파싱 오류와 최상위 형식 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86730"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86730#comment"/>		<id>https://chaegeon.com/study/86730</id>
		<published>2026-10-27T06:21:03+09:00</published>
		<updated>2026-10-27T06:21:03+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 JSON을 받으면 파싱 성공 여부와 원하는 구조인지 두 번 확인한다. 문법적으로 맞는 JSON이어도 최상위가 객체인지 배열인지에 따라 읽는 코드가 달라진다. 함수와 인수 읽기 json 바이트 fromJson()의 입력은 UTF-8 JSON 바이트다. 네트워크에서 받은 QByteArray를 불필요하게 다른 인코딩으로 바꾸지 않는다. QJsonParseError 오류 종류와 바이트 위치를 받는다. 파싱이 끝나면 error 값을 확인하고 성공한 문서에서만 obj...</summary>
				</entry><entry>
		<title>QSettings::value() :: 기본값과 저장된 값 구분하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86727"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86727#comment"/>		<id>https://chaegeon.com/study/86727</id>
		<published>2026-10-26T23:50:11+09:00</published>
		<updated>2026-10-26T23:50:11+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 아직 저장된 적 없는 설정을 읽을 때 기본값을 지정할 수 있다. 기본값이 반환됐다고 그 값이 자동 저장되는 것은 아니다. 함수와 인수 읽기 defaultValue 키가 없을 때 반환할 값이다. 기본값의 형식도 변환 결과에 영향을 줄 수 있어 숫자는 숫자로 전달한다. contains() 키가 실제로 저장돼 있는지 구분한다. 존재하지 않는 키와 기본값과 같은 값을 명시적으로 저장한 상태는 서로 다르다. 직접 실행하기 #include &lt;QCor...</summary>
				</entry><entry>
		<title>QSettings::setValue() :: 설정 키를 저장하고 오류 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86724"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86724#comment"/>		<id>https://chaegeon.com/study/86724</id>
		<published>2026-10-26T23:15:57+09:00</published>
		<updated>2026-10-26T23:15:57+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 창 크기나 마지막 선택값을 저장할 때 QSettings를 사용할 수 있다. 메모리의 값을 바꾸는 일과 실제 저장소에 반영하는 일은 구분한다. 함수와 인수 읽기 key와 value 키는 설정을 구분하는 이름이다. 값은 QVariant로 저장할 수 있는 형식을 사용한다. 같은 키를 다시 저장하면 그 키의 값을 교체한다. sync()와 status() sync()로 쓰기 반영을 요청한 뒤 status()를 확인한다. 저장 경로 권한이나 형식 오류가 생겼는데 ...</summary>
				</entry><entry>
		<title>QStandardPaths::writableLocation() :: 사용자별 저장 경로 찾기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86721"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86721#comment"/>		<id>https://chaegeon.com/study/86721</id>
		<published>2026-10-26T20:51:03+09:00</published>
		<updated>2026-10-26T20:51:03+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 설정이나 캐시를 실행 파일 옆에 저장하면 설치 디렉터리 권한 때문에 실패할 수 있다. QStandardPaths로 용도에 맞는 사용자별 경로를 찾는다. 함수와 인수 읽기 조직 이름과 프로그램 이름 일부 애플리케이션별 경로는 QCoreApplication에 설정한 이름에 영향을 받는다. 경로를 읽기 전에 프로그램에서 사용할 이름을 정한다. StandardLocation AppDataLocation은 프로그램 데이터용이고 CacheLocation은 지워도 다시 만들...</summary>
				</entry><entry>
		<title>QFileInfo::exists() :: 경로 존재 여부와 파일 종류 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86718"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86718#comment"/>		<id>https://chaegeon.com/study/86718</id>
		<published>2026-10-26T19:09:08+09:00</published>
		<updated>2026-10-26T19:09:08+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 파일 경로를 검사할 때 존재 여부와 일반 파일 여부는 다른 질문이다. 디렉터리도 존재하는 경로지만 일반 파일로 읽을 수는 없다. 함수와 인수 읽기 exists() 경로가 존재하는지 확인한다. 객체를 만든 뒤 파일 상태가 바뀌었다면 캐시된 정보와 실제 상태가 다를 수 있다. isFile()과 isDir() 일반 파일인지 디렉터리인지 구분한다. 파일을 실제로 열 수 있는 권한이나 앞으로도 존재할 것이라는 보장까지 주는 검사는 아...</summary>
				</entry><entry>
		<title>QDir::entryList() :: 디렉터리에서 필요한 파일만 고르기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86715"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86715#comment"/>		<id>https://chaegeon.com/study/86715</id>
		<published>2026-10-26T02:30:30+09:00</published>
		<updated>2026-10-26T02:30:30+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 디렉터리 목록을 읽을 때는 이름 필터와 파일 종류 필터 및 정렬 기준을 따로 지정한다. 와일드카드 이름 필터는 정규식과 다르다. 함수와 인수 읽기 nameFilters *.txt처럼 파일 이름에 적용할 패턴 목록이다. 여러 패턴을 QStringList에 넣을 수 있다. Filters와 SortFlags QDir::Files는 파일 항목을 고른다. QDir::Name은 이름순 정렬이다. 숨김 파일이나 심볼릭 링크를 포함할지는 필요한 규칙에 맞게 명시한다. 직접 ...</summary>
				</entry><entry>
		<title>QSaveFile::commit() :: 저장이 끝난 뒤 파일 교체하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86712"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86712#comment"/>		<id>https://chaegeon.com/study/86712</id>
		<published>2026-10-25T21:47:38+09:00</published>
		<updated>2026-10-25T21:47:38+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 설정 파일을 바로 덮어쓰다가 중간에 실패하면 원래 파일까지 잃을 수 있다. QSaveFile은 임시 파일에 쓴 뒤 commit()으로 교체를 마무리한다. 함수와 인수 읽기 open(WriteOnly) 저장할 최종 경로로 QSaveFile을 만든다. 일반적인 파일 시스템에서는 같은 디렉터리의 임시 파일을 통해 쓴다. commit() 쓰기 완료 후 반드시 반환값을 확인한다. 성공해야 최종 파일 교체가 끝난 것으로 본다. QFile의 close() 호출로 대신하...</summary>
				</entry><entry>
		<title>QTextStream::readLine() :: 텍스트 파일을 줄 단위로 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86709"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86709#comment"/>		<id>https://chaegeon.com/study/86709</id>
		<published>2026-10-25T21:06:41+09:00</published>
		<updated>2026-10-25T21:06:41+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 텍스트 파일을 한 줄씩 처리하려면 QTextStream을 사용할 수 있다. 파일 바이트의 인코딩과 문자열 처리 규칙을 나누어 둔다. 함수와 인수 읽기 setEncoding() Qt 6에서는 QStringConverter::Utf8처럼 인코딩을 지정한다. 파일 형식이 UTF-8이라는 전제라면 그 전제를 읽기 코드에도 명시한다. readLine()과 atEnd() readLine()은 줄 끝 문자를 제외한 문자열을 돌려준다. 빈 줄도 유효한 한 줄이므로 결과가 비었다는 이유...</summary>
				</entry><entry>
		<title>QFile::readAll() :: 파일 전체를 읽고 바이트로 다루기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86706"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86706#comment"/>		<id>https://chaegeon.com/study/86706</id>
		<published>2026-10-25T20:21:23+09:00</published>
		<updated>2026-10-25T20:21:23+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 작은 설정 파일을 읽을 때 readAll()은 사용하기 간단하다. 다만 결과는 QString이 아니라 원시 바이트인 QByteArray다. 함수와 인수 읽기 현재 파일 위치 readAll()은 파일의 현재 위치부터 끝까지 읽는다. 이미 일부를 읽은 파일에서는 앞부분이 결과에 포함되지 않는다. 빈 결과와 오류 빈 파일과 읽기 실패가 모두 빈 바이트 배열처럼 보일 수 있다. 파일을 성공적으로 열었는지와 QFile의 오류 상태를 함께 확인한다. ...</summary>
				</entry><entry>
		<title>QFile::open() :: 파일을 여는 모드와 실패 처리</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86703"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86703#comment"/>		<id>https://chaegeon.com/study/86703</id>
		<published>2026-10-24T18:02:18+09:00</published>
		<updated>2026-10-24T18:02:18+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 파일을 열 때는 읽을 것인지 새 파일을 만들 것인지 먼저 결정한다. 모드를 잘못 주면 기존 내용이 잘릴 수 있다. 함수와 인수 읽기 WriteOnly와 NewOnly WriteOnly는 쓰기용이다. NewOnly를 함께 지정하면 같은 이름의 파일이 이미 있을 때 열기에 실패해 덮어쓰기를 막는다. 반환값과 errorString() open()은 성공 여부를 bool로 돌려준다. 실패하면 errorString()으로 이유를 확인하고 write()를 이어서 실행하지 않는다....</summary>
				</entry><entry>
		<title>QLocale::toDouble() :: 지역 형식으로 입력한 숫자 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86700"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86700#comment"/>		<id>https://chaegeon.com/study/86700</id>
		<published>2026-10-24T15:27:31+09:00</published>
		<updated>2026-10-24T15:27:31+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 사용자가 입력한 숫자에는 지역별 소수점과 천 단위 구분자가 들어갈 수 있다. QLocale로 어느 지역의 숫자인지 분명히 지정해서 읽는다. 함수와 인수 읽기 locale 예제는 영어와 미국 숫자 규칙을 지정한다. 시스템 기본 지역에 따라 테스트 결과가 달라지지 않도록 지역을 코드에 명시했다. ok와 numberOptions ok는 변환 성공 여부다. RejectGroupSeparator를 지정하면 천 단위 구분자가 들어간 입력을 허용하지 않는다. ...</summary>
				</entry><entry>
		<title>QDateTime::fromString() :: 날짜를 읽고 유효성 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86697"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86697#comment"/>		<id>https://chaegeon.com/study/86697</id>
		<published>2026-10-24T14:11:56+09:00</published>
		<updated>2026-10-24T14:11:56+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 날짜처럼 보이는 문자열을 읽었다고 유효한 날짜가 된 것은 아니다. fromString() 뒤에서 isValid()를 확인한다. 함수와 인수 읽기 입력 형식 Qt::ISODate는 ISO 형식 문자열을 읽는다. 별도의 형식 문자열을 지정하는 경우 입력의 구분자와 순서가 그 형식과 맞아야 한다. isValid() 파싱할 수 없거나 존재하지 않는 날짜라면 false다. 잘못된 결과를 현재 시각이나 0초 같은 값으로 무심코 대체하지 않는다. 직접 실행하기...</summary>
				</entry><entry>
		<title>QDateTime::toString() :: 시간대가 드러나는 날짜 문자열 만들기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86694"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86694#comment"/>		<id>https://chaegeon.com/study/86694</id>
		<published>2026-10-24T13:57:16+09:00</published>
		<updated>2026-10-24T13:57:16+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 로그 시각을 문자열로 저장할 때 날짜만 쓰면 어느 시간대의 값인지 알기 어렵다. 같은 시점을 표시해도 UTC와 한국 시각의 문자열은 다르다. 함수와 인수 읽기 Qt::ISODate 연월일과 시간 및 시간대 정보를 표현하는 표준 형식이다. 사람이 보는 짧은 표시와 시스템 사이에 전달할 기록 형식은 따로 정한다. 사용자 지정 형식 yyyy는 연도이고 MM은 월이다. mm은 분이며 hh는 시다. 대소문자가 다른 형식 문자를 바꾸어 쓰...</summary>
				</entry><entry>
		<title>QRegularExpression::match() :: 일치 결과와 캡처 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86691"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86691#comment"/>		<id>https://chaegeon.com/study/86691</id>
		<published>2026-10-24T13:45:41+09:00</published>
		<updated>2026-10-24T13:45:41+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 입력 형식을 검사할 때 정규식의 일부 일치와 전체 일치를 구분해야 한다. match()는 일치 결과 객체를 돌려준다. 함수와 인수 읽기 패턴과 앵커 \A와 \z는 문자열 전체의 시작과 끝을 나타낸다. 번호만 입력받으려는 검사에서 앵커를 빼면 앞뒤에 불필요한 글자가 있어도 일부 구간이 일치할 수 있다. captured(n) 0번은 일치한 전체 문자열이다. 괄호로 묶은 첫 그룹이 1번이며 이후 그룹 번호가 이어진다. 사용 전에 hasM...</summary>
				</entry><entry>
		<title>QByteArray::toHex() :: 바이너리 값을 16진수로 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86688"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86688#comment"/>		<id>https://chaegeon.com/study/86688</id>
		<published>2026-10-23T23:38:47+09:00</published>
		<updated>2026-10-23T23:38:47+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 수신한 바이너리를 문자처럼 출력하면 널 바이트나 제어 문자 때문에 실제 내용을 놓칠 수 있다. toHex()로 바이트별 값을 읽으면 패킷을 확인하기 쉽다. 함수와 인수 읽기 구분자 없는 출력 toHex()는 각 바이트를 두 자리 16진수 문자로 바꾼다. 출력 길이는 원래 바이트 수의 두 배가 된다. separator toHex(&#039; &#039;)처럼 문자 하나를 지정하면 바이트 사이에 구분자를 넣는다. 사람이 읽는 로그와 다시 파싱할 저장 형식은 ...</summary>
				</entry><entry>
		<title>QStringList::join() :: 문자열 목록을 한 줄로 합치기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86685"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86685#comment"/>		<id>https://chaegeon.com/study/86685</id>
		<published>2026-10-23T22:46:02+09:00</published>
		<updated>2026-10-23T22:46:02+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 선택한 항목들을 화면에 한 줄로 표시할 때 QStringList의 join()을 쓸 수 있다. 구분자는 항목 사이에만 들어간다. 함수와 인수 읽기 separator 각 문자열 사이에 끼울 문자나 문자열이다. 빈 문자열을 지정하면 항목을 바로 이어 붙인다. 빈 항목 목록 안의 빈 문자열도 하나의 항목이다. join()이 빈 항목을 알아서 제거하지 않으므로 연속 구분자가 나올 수 있다. 직접 실행하기 #include &lt;QCoreApplication&gt; #include &lt;...</summary>
				</entry><entry>
		<title>QString::number() :: 숫자의 진법과 소수 자릿수 지정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86682"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86682#comment"/>		<id>https://chaegeon.com/study/86682</id>
		<published>2026-10-23T21:34:09+09:00</published>
		<updated>2026-10-23T21:34:09+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 숫자를 문자열로 표시할 때 number()의 오버로드에 따라 지정하는 옵션이 다르다. 정수의 진법과 실수의 표시 형식을 구분해서 읽는다. 함수와 인수 읽기 정수와 base 정수용 number(value, base)는 지정한 진법으로 숫자를 문자열로 만든다. base를 16으로 지정해도 0x 접두사를 자동으로 붙여 주는 것은 아니다. 실수의 format과 precision f는 고정 소수점 표시이고 이때 precision은 소수점 아래 자릿수다. g 형식에서는...</summary>
				</entry><entry>
		<title>QString::toUtf8() :: 문자열을 UTF-8 바이트로 내보내기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86679"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86679#comment"/>		<id>https://chaegeon.com/study/86679</id>
		<published>2026-10-23T21:05:43+09:00</published>
		<updated>2026-10-23T21:05:43+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 문자열을 파일이나 네트워크에 보낼 때는 어떤 바이트 인코딩을 사용할지 정해야 한다. toUtf8()은 QString을 UTF-8 QByteArray로 바꾼다. 함수와 인수 읽기 반환 QByteArray 결과는 바이트를 소유하는 QByteArray다. 전송 길이에는 QString 길이가 아니라 이 배열의 size()를 사용한다. constData()의 수명 constData()로 얻은 포인터는 QByteArray가 유효한 동안에만 사용할 수 있다. 임시 QByteArray에서 얻은 포인터를 ...</summary>
				</entry><entry>
		<title>QString::fromUtf8() :: UTF-8 바이트를 문자열로 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86676"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86676#comment"/>		<id>https://chaegeon.com/study/86676</id>
		<published>2026-10-23T00:10:30+09:00</published>
		<updated>2026-10-23T00:10:30+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt의 QString과 외부 파일의 바이트 배열은 같은 형식이 아니다. UTF-8로 저장된 바이트를 화면 문자열로 만들 때 fromUtf8()로 인코딩을 명시한다. 함수와 인수 읽기 data와 size 포인터와 길이를 넘기는 오버로드에서는 size가 바이트 수다. 글자 개수와 같다고 생각하면 한글 데이터에서 쉽게 틀린다. 입력 인코딩 fromUtf8()은 입력을 UTF-8이라고 해석한다. 다른 인코딩의 파일을 넣었다고 자동으로 올바른 인코딩을 찾아 주지...</summary>
				</entry><entry>
		<title>QString::trimmed() :: 앞뒤 공백만 제거하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86673"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86673#comment"/>		<id>https://chaegeon.com/study/86673</id>
		<published>2026-10-22T22:20:16+09:00</published>
		<updated>2026-10-22T22:20:16+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 입력 앞뒤의 공백은 무시하되 문장 안쪽의 띄어쓰기는 유지하고 싶은 경우가 있다. trimmed()와 simplified()의 차이를 알고 쓰면 내용이 뜻하지 않게 바뀌는 일을 줄일 수 있다. 함수와 인수 읽기 trimmed() 문자열 양끝의 공백 문자를 제거한 QString을 돌려준다. 가운데 연속 공백은 그대로 둔다. simplified()와의 차이 simplified()는 양끝 공백을 지우면서 내부의 연속 공백도 하나로 줄인다. 고정 폭 데이터나 공백이...</summary>
				</entry><entry>
		<title>QString::split() :: 구분자로 나눈 항목 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86670"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86670#comment"/>		<id>https://chaegeon.com/study/86670</id>
		<published>2026-10-22T21:53:41+09:00</published>
		<updated>2026-10-22T21:53:41+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 쉼표나 경로 구분자로 나눈 항목을 읽을 때 split()으로 QStringList를 만들 수 있다. 빈 항목을 유지할지 버릴지부터 정하면 결과를 이해하기 쉽다. 함수와 인수 읽기 separator 나누는 기준 문자열이나 문자다. 정규식 규칙이 필요한 경우에는 QRegularExpression을 받는 오버로드를 사용한다. KeepEmptyParts와 SkipEmptyParts 연속 구분자나 문자열 양끝의 구분자 때문에 생긴 빈 항목을 유지하거나 버린다. 공백으로만 ...</summary>
				</entry><entry>
		<title>QString::toInt() :: 문자열을 정수로 읽고 실패 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86667"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86667#comment"/>		<id>https://chaegeon.com/study/86667</id>
		<published>2026-10-22T21:40:50+09:00</published>
		<updated>2026-10-22T21:40:50+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 입력란의 숫자를 읽을 때 toInt() 결과만 보면 잘못된 입력과 숫자 0을 구분하지 못한다. 성공 여부를 함께 받아야 한다. 함수와 인수 읽기 ok bool 변수의 주소를 넘기면 변환 성공 여부가 기록된다. 변환에 실패했을 때 반환되는 0을 정상 입력으로 바로 사용하지 않는다. base 10은 10진수다. 16을 주면 16진수로 해석한다. 일반적인 사용자 숫자 입력은 의도를 분명히 하도록 10을 지정한다. 직접 실행하기 #include &lt;QC...</summary>
				</entry><entry>
		<title>QString::arg() :: 문자열의 자리표시자 채우기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86664"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86664#comment"/>		<id>https://chaegeon.com/study/86664</id>
		<published>2026-10-22T20:45:33+09:00</published>
		<updated>2026-10-22T20:45:33+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 상태 문구에 숫자나 이름을 넣을 때 QString의 자리표시자를 사용할 수 있다. 문자열을 여러 번 더하는 것보다 문장 전체를 읽기 쉽다. 함수와 인수 읽기 %1과 %2 문자열 안의 자리표시자 번호다. arg()는 남아 있는 가장 낮은 번호의 자리표시자를 바꾸며 같은 번호가 여러 번 나오면 함께 바꾼다. fieldWidth와 base 정수용 오버로드에서는 폭과 진법을 지정할 수 있다. 폭은 출력 자릿수의 최소값이며 원래 숫자를 잘라 ...</summary>
				</entry><entry>
		<title>QElapsedTimer::elapsed() :: 처리에 걸린 시간 측정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86661"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86661#comment"/>		<id>https://chaegeon.com/study/86661</id>
		<published>2026-10-22T20:18:53+09:00</published>
		<updated>2026-10-22T20:18:53+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 함수 실행 시간을 재려면 현재 시각보다 경과 시간용 시계를 쓰는 편이 맞다. QElapsedTimer는 시스템 시각을 표시하는 도구가 아니다. 함수와 인수 읽기 start() 측정 시작점을 기록한다. 시작하지 않은 타이머에서 elapsed() 결과를 사용하지 않는다. elapsed() 시작 이후 지난 시간을 밀리초 정수로 돌려준다. 더 작은 단위가 필요하면 nsecsElapsed()를 사용하되 측정 정밀도가 숫자의 단위와 같다고 단정하지 않는다. ...</summary>
				</entry><entry>
		<title>QTimer::singleShot() :: 잠시 뒤 한 번만 실행하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86658"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86658#comment"/>		<id>https://chaegeon.com/study/86658</id>
		<published>2026-10-21T23:22:11+09:00</published>
		<updated>2026-10-21T23:22:11+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Qt에서 안내 문구를 몇 초 뒤 바꾸거나 현재 처리를 마친 다음 작업을 이어 갈 때 singleShot()을 쓸 수 있다. 별도의 반복 타이머를 만들 필요가 없다. 함수와 인수 읽기 밀리초 지연 singleShot(1000, ...)은 대략 1초 뒤에 콜백을 요청한다. 해당 스레드의 이벤트 루프가 바쁘면 그보다 늦게 실행된다. context 객체 콜백 앞에 context를 지정하면 context가 먼저 삭제됐을 때 콜백이 실행되지 않는다. 화면 객체를 참조하는 람...</summary>
				</entry><entry>
		<title>date :: 날짜 형식과 시간대 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86655"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86655#comment"/>		<id>https://chaegeon.com/study/86655</id>
		<published>2026-10-21T22:43:06+09:00</published>
		<updated>2026-10-21T22:43:06+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 현재 시각을 형식 문자열에 맞춰 출력한다. 문법과 옵션을 나눠 보면 -u는 UTC 기준 출력이다. + 뒤는 형식 문자열이다. %Y와 %m과 %d는 연월일이고 %H와 %M과 %S는 시분초다. Z는 여기서 직접 넣은 UTC 표식이다. 기본 사용 예 date -u &#039;+%Y-%m-%dT%H:%M:%SZ&#039; -u로 UTC를 선택했기 때문에 끝에 Z를 붙인다. 로컬 시각을 출력하면서 Z만 붙이면 잘못된 시간대 표시가 된다. 같은 시각을 UTC와 한국 시간으로 표시하기...</summary>
				</entry><entry>
		<title>env :: 환경 변수 목록과 실행 환경 지정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86652"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86652#comment"/>		<id>https://chaegeon.com/study/86652</id>
		<published>2026-10-21T21:50:31+09:00</published>
		<updated>2026-10-21T21:50:31+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 명령 하나에만 적용할 환경 변수를 지정해 실행한다. 문법과 옵션을 나눠 보면 NAME=value는 그 명령 실행에 전달할 환경 설정이다. -i는 기존 환경을 비우는 별도 옵션이다. env 출력 전체에는 토큰이나 비밀번호가 들어갈 수 있다. 기본 사용 예 env LC_ALL=C date LC_ALL=C로 date의 출력 언어 또는 로케일을 고정한다. 부모 셸의 같은 변수 값을 영구 변경하는 예제가 아니다. 상속 환경을 비우고 자식 프로세스 ...</summary>
				</entry><entry>
		<title>timeout :: 명령의 최대 실행 시간 제한하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86649"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86649#comment"/>		<id>https://chaegeon.com/study/86649</id>
		<published>2026-10-21T19:47:33+09:00</published>
		<updated>2026-10-21T19:47:33+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 명령이 너무 오래 실행되면 종료 요청을 보내도록 제한한다. 문법과 옵션을 나눠 보면 3s는 3초 제한이다. 기본은 제한 도달 시 TERM을 보낸다. -k는 추가 시간 후 KILL을 보내는 정책이다. --preserve-status는 종료 상태 처리 규칙을 바꾼다. 기본 사용 예 timeout 3s sleep 10 echo &quot;$?&quot; 10초 sleep에 3초 한도를 줘 시간 초과 상태를 본다. 기본 시간 초과는 보통 124이며 명령의 자체 오류와 구분한다. 한 번 더...</summary>
				</entry><entry>
		<title>lsof :: 프로세스가 열고 있는 파일 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86646"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86646#comment"/>		<id>https://chaegeon.com/study/86646</id>
		<published>2026-10-21T06:19:28+09:00</published>
		<updated>2026-10-21T06:19:28+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 프로세스가 열어 둔 파일과 소켓 목록을 읽는다. 문법과 옵션을 나눠 보면 -p PID는 그 프로세스가 연 파일을 조회한다. $$는 현재 셸 PID다. 파일에는 일반 파일뿐 아니라 소켓과 파이프도 포함된다. 기본 사용 예 lsof -p $$ -p $$는 현재 셸 PID로 범위를 줄인다. 소켓도 파일 디스크립터로 관리돼 같은 도구에서 볼 수 있다. 한 번 더 확인할 예제 lsof -p &quot;$$&quot; FD 열에서 번호와 접근 모드를 읽고 NAME 열에서 ...</summary>
				</entry><entry>
		<title>strace :: 프로세스의 시스템 호출 추적하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86643"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86643#comment"/>		<id>https://chaegeon.com/study/86643</id>
		<published>2026-10-20T23:42:09+09:00</published>
		<updated>2026-10-20T23:42:09+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 프로그램이 실제로 어떤 시스템 호출을 하는지 관찰한다. 문법과 옵션을 나눠 보면 -f는 자식 프로세스도 추적한다. -e trace=는 볼 시스템 호출 목록이다. -o는 추적 로그 파일이다. 프로그램 인수는 strace 옵션 뒤에 온다. 기본 사용 예 strace -f -e trace=openat,read,write cat /etc/os-release 예제는 공개 시스템 파일을 읽는 cat을 추적한다. -f는 자식도 따라가며 출력에 민감한 경로 또는 데이터가 남을 ...</summary>
				</entry><entry>
		<title>dmesg :: 커널 메시지 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86640"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86640#comment"/>		<id>https://chaegeon.com/study/86640</id>
		<published>2026-10-20T23:23:55+09:00</published>
		<updated>2026-10-20T23:23:55+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 커널이 남긴 메시지를 읽는다. 문법과 옵션을 나눠 보면 --level=err,warn은 오류와 경고 우선순위를 고른다. -T는 사람이 읽기 쉬운 시각을 요청하지만 절전이나 시각 변경 환경에서 정확한 시간 대응에 주의한다. 기본 사용 예 dmesg --level=err,warn err,warn 수준만 골라 장치 또는 드라이버 문제의 단서를 찾는다. 권한 정책으로 읽기가 막히면 메시지가 없는 상황과 구분한다. 앞으로 생기는 경고와 오류만 기...</summary>
				</entry><entry>
		<title>journalctl :: systemd 저널에서 로그 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86637"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86637#comment"/>		<id>https://chaegeon.com/study/86637</id>
		<published>2026-10-20T23:07:27+09:00</published>
		<updated>2026-10-20T23:07:27+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 서비스나 시간 범위를 좁혀 systemd 로그를 읽는다. 문법과 옵션을 나눠 보면 -u는 유닛 이름이고 --since는 시작 시각이다. -n 30은 마지막 30개 레코드다. -f는 새 로그를 계속 따라간다. --no-pager는 직접 출력한다. 기본 사용 예 journalctl -u ssh --since today --no-pager -u ssh로 서비스, --since today로 오늘 이후만 선택한다. 결과가 비었다고 오류가 없었다는 뜻은 아니며 권한과 보관 기간도 본다. 한...</summary>
				</entry><entry>
		<title>systemctl :: systemd 서비스 상태 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86634"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86634#comment"/>		<id>https://chaegeon.com/study/86634</id>
		<published>2026-10-20T22:52:20+09:00</published>
		<updated>2026-10-20T22:52:20+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 systemd가 관리하는 서비스의 현재 상태를 읽는다. 문법과 옵션을 나눠 보면 status는 서비스 상태 조회다. --no-pager는 페이지 프로그램을 거치지 않는다. is-active는 자동화에서 상태를 종료 코드로 읽을 때 쓴다. 기본 사용 예 systemctl status ssh --no-pager status는 조회이고 restart처럼 재시작하지 않는다. ssh 서비스 이름은 배포판에 따라 sshd 등으로 다를 수 있다. 지금 실행 중인지와 부팅 시 시작...</summary>
				</entry><entry>
		<title>scp :: SSH를 통해 파일 복사하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86631"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86631#comment"/>		<id>https://chaegeon.com/study/86631</id>
		<published>2026-10-20T20:04:56+09:00</published>
		<updated>2026-10-20T20:04:56+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 SSH 연결로 파일 하나를 원격 경로에 복사한다. 문법과 옵션을 나눠 보면 -P는 포트 번호이며 대문자다. 소문자 -p는 시간과 모드 보존 옵션이다. 원격 경로는 user@server:PATH 형태다. -r은 재귀 복사라 영향 범위가 넓다. 기본 사용 예 scp -P 22 file.txt user@server:./ 포트 옵션은 ssh의 -p와 달리 대문자 -P다. 목적지에 같은 파일이 있으면 덮어쓸 수 있어 경로를 명시한다. 원격 파일을 내 컴퓨터로 받기 s...</summary>
				</entry><entry>
		<title>ssh :: 암호화된 원격 셸 접속하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86628"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86628#comment"/>		<id>https://chaegeon.com/study/86628</id>
		<published>2026-10-19T23:28:36+09:00</published>
		<updated>2026-10-19T23:28:36+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 원격 서버의 암호화된 셸에 접속한다. 문법과 옵션을 나눠 보면 -p는 포트 번호다. -i는 개인 키 파일이며 -o는 개별 설정을 준다. user@server는 계정과 호스트다. 서버 호스트 키와 사용자 로그인 키는 다른 역할이다. 기본 사용 예 ssh -p 22 user@server user와 server는 실제 계정 또는 주소로 바꾼다. -p는 SSH 포트이며 처음 접속한 호스트 키는 서버 관리 경로로 확인한다. 접속한 뒤 명령 하나만 실행하기 s...</summary>
				</entry><entry>
		<title>rsync :: 파일 차이를 계산해 동기화하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86625"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86625#comment"/>		<id>https://chaegeon.com/study/86625</id>
		<published>2026-10-19T23:06:31+09:00</published>
		<updated>2026-10-19T23:06:31+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 원본과 대상의 차이를 비교해 복사할 항목을 계산한다. 문법과 옵션을 나눠 보면 -a는 주요 속성을 보존하는 archive 묶음이다. -v는 자세한 출력이고 -n은 실제 변경 없는 예행연습이다. --delete는 대상의 여분 파일을 지우므로 이 예제에는 넣지 않는다. 기본 사용 예 rsync -avn source/ destination/ -n은 실제 변경 없는 예행연습이다. source/ 뒤의 슬래시는 디렉터리 자체보다 그 내용을 복사하는 의미라 결...</summary>
				</entry><entry>
		<title>gzip :: 파일을 gzip 형식으로 압축하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86622"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86622#comment"/>		<id>https://chaegeon.com/study/86622</id>
		<published>2026-10-19T22:32:04+09:00</published>
		<updated>2026-10-19T22:32:04+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 파일 내용을 gzip으로 압축한다. 문법과 옵션을 나눠 보면 -c는 결과를 표준 출력으로 보내 원본을 남긴다. -d는 해제이고 -t는 압축 데이터 검사다. 일반 gzip FILE은 성공 후 원본을 압축 파일로 대체할 수 있다. 기본 사용 예 gzip -c input.txt &gt;input.txt.gz -c는 결과를 표준 출력으로 보내 원본을 남긴다. 리다이렉션 목적지 input.txt.gz는 덮어쓸 수 있어 파일 이름을 확인한다. 한 번 더 확인할 예제 gzip ...</summary>
				</entry><entry>
		<title>tar :: 아카이브 안의 파일 목록 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86619"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86619#comment"/>		<id>https://chaegeon.com/study/86619</id>
		<published>2026-10-19T21:43:56+09:00</published>
		<updated>2026-10-19T21:43:56+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 아카이브를 풀기 전에 안의 경로 목록부터 읽는다. 문법과 옵션을 나눠 보면 -t는 목록이고 -x는 해제이며 -c는 생성이다. -f 바로 뒤는 아카이브 파일이다. -v는 자세한 항목 표시이고 -C는 작업 기준 디렉터리를 바꾼다. 기본 사용 예 tar -tf archive.tar -t는 목록 조회, -f는 대상 파일 지정이다. 이 예제는 archive.tar를 만들거나 해제하지 않는다. 한 번 더 확인할 예제 work=$(mktemp -d) mkdir &quot;$work/sour...</summary>
				</entry><entry>
		<title>sha256sum :: 파일의 SHA-256 해시 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86616"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86616#comment"/>		<id>https://chaegeon.com/study/86616</id>
		<published>2026-10-19T20:10:53+09:00</published>
		<updated>2026-10-19T20:10:53+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 파일의 SHA-256 값을 계산해 내용이 같은지 비교한다. 문법과 옵션을 나눠 보면 파일 경로를 주면 SHA-256 값을 계산한다. -c는 해시 목록 파일과 실제 파일을 대조한다. 체크섬 자체의 출처가 신뢰 가능해야 한다. 기본 사용 예 sha256sum file.bin file.bin을 실제 확인할 경로로 바꾼다. 기대 해시도 신뢰할 수 있는 곳에서 얻어야 출처 검증에 도움이 된다. 기록해 둔 해시와 다시 비교하기 ( work=$(mktemp -d) ...</summary>
				</entry><entry>
		<title>wget :: 다운로드 전에 URL 응답 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86613"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86613#comment"/>		<id>https://chaegeon.com/study/86613</id>
		<published>2026-10-18T16:22:40+09:00</published>
		<updated>2026-10-18T16:22:40+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 파일을 내려받기 전에 URL의 접근 가능 여부를 점검한다. 문법과 옵션을 나눠 보면 --spider는 접근 가능 여부를 검사하는 모드다. --timeout은 네트워크 대기 제한이고 --tries는 재시도 수다. -O는 실제 다운로드의 저장 경로를 정하므로 검사 예제와 구분한다. 기본 사용 예 wget --spider https://example.com --spider는 이 예제에서 파일을 실제 저장하지 않는 검사 모드다. 다운로드 자체의 예제와 구분한다. ...</summary>
				</entry><entry>
		<title>curl :: HTTP 응답과 헤더 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86610"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86610#comment"/>		<id>https://chaegeon.com/study/86610</id>
		<published>2026-10-18T13:43:48+09:00</published>
		<updated>2026-10-18T13:43:48+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 HTTP 서버의 응답 헤더를 읽는다. 문법과 옵션을 나눠 보면 -I는 HEAD 요청이다. --max-time 10은 전체 제한 시간이다. -sS는 진행 표시를 줄이되 오류를 표시한다. --fail은 일부 HTTP 오류를 실패 상태로 처리한다. 기본 사용 예 curl -I --max-time 10 https://example.com -I는 HEAD 요청, --max-time 10은 전체 시간 제한이다. 명령 연결 성공과 HTTP 404 같은 응답 상태는 별도로 본다. HEAD 대신 GET의 응답 ...</summary>
				</entry><entry>
		<title>ping :: ICMP 응답으로 기본 연결 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86607"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86607#comment"/>		<id>https://chaegeon.com/study/86607</id>
		<published>2026-10-18T13:34:14+09:00</published>
		<updated>2026-10-18T13:34:14+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 ICMP 응답으로 기본 연결 상태를 확인한다. 문법과 옵션을 나눠 보면 -c 3은 세 번 요청 뒤 끝낸다. -W는 응답 대기와 관계하며 구현별 단위를 확인한다. 루프백 127.0.0.1은 내 컴퓨터 자신이다. 기본 사용 예 ping -c 3 127.0.0.1 예제는 내 컴퓨터의 루프백 127.0.0.1에 세 번 보낸다. 이 성공만으로 인터넷이나 웹 서비스가 정상임을 증명하지는 않는다. 이름 조회와 대기 시간과 데이터 크기 정하기 ping -n -c ...</summary>
				</entry><entry>
		<title>ip route :: 패킷 경로와 기본 게이트웨이 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86604"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86604#comment"/>		<id>https://chaegeon.com/study/86604</id>
		<published>2026-10-18T01:28:54+09:00</published>
		<updated>2026-10-18T01:28:54+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 기본 게이트웨이와 대상별 실제 선택 경로를 읽는다. 문법과 옵션을 나눠 보면 route show는 경로 테이블이다. route get ADDRESS는 그 목적지로 보낼 때 선택될 경로를 계산한다. dev는 인터페이스이고 src는 선택된 원본 주소다. 기본 사용 예 ip route show ip route get 1.1.1.1 route show는 테이블, route get 1.1.1.1은 그 주소로 보낼 때 선택할 경로다. get은 실제 패킷을 보내는 ping이 아니다. 한 번 더 ...</summary>
				</entry><entry>
		<title>ip address :: 네트워크 인터페이스 주소 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86601"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86601#comment"/>		<id>https://chaegeon.com/study/86601</id>
		<published>2026-10-17T17:54:41+09:00</published>
		<updated>2026-10-17T17:54:41+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 네트워크 인터페이스의 주소와 상태를 읽는다. 문법과 옵션을 나눠 보면 -brief는 짧은 형식이다. address show는 주소를 조회한다. 인터페이스 상태와 주소의 prefix 길이를 함께 읽는다. 기본 사용 예 ip -brief address show -brief로 짧게 표시한다. 링크 UP 상태와 원하는 IP가 붙은 상태는 별도로 확인한다. IPv4 주소와 범위 조건으로 좁히기 ip -4 -o address show scope global -4는 IPv4 주소만 고른다. -o...</summary>
				</entry></feed>
