Qt프로그램14 채팅 서버/클라이언트 구현 채팅 서버 예제 구현#ifndef CHATSERVER_H#define CHATSERVER_H#include #include #include // ChatServer 클래스 선언: QTcpServer를 상속받아 채팅 서버 기능을 구현class ChatServer : public QTcpServer{Q_OBJECTpublic: // 생성자: ChatServer 객체를 초기화하며, 부모 객체를 설정 ChatServer(QObject *parent = nullptr); // 소멸자: 객체가 소멸될 때 호출됩니다. ~ChatServer();private slots: // 슬롯: 클라이언트로부터 데이터를 읽을 준비가 되었을 때 호출 void readyRead(); // 슬롯: .. Qt프로그램 2024. 10. 11. TCP 프로토콜 / 동기 방식 비 동기 방식 구현 네트워크에서 데이터 송/수신 처리 방식을 크게 두가지로 나누어 볼 수 있다. 첫 번째는 동기 방식이고 두 번째 방식은 비 동기 방식이다. 동기 방식은 서버가 클라이언트에게 Request 했을 때, 다른 처리는 하지 않고 응답을기다리는 경우이다. 이러한 경우를 동기 방식이라 한다.int writeBytes = socket->write("Hello server\r\n\r\n");socket->waitForReadyRead(3000);write( ) 함수를 이용해 메시지를 전송하고 상대방으로부터 메시지를 받을 때까지 기다리기 위해서 waitForReadyRead( ) 함수를 사용할 수 있다. 비 동기 방식이란 서버가 클라이언트에게 Request을 하였지만 언제 응답을 받을지 모르는 상황을 비 동기 방식으로 처.. Qt프로그램 2024. 10. 10. TCP 프로토콜 기반 서버/클라이언트 접속구현 QTcpServer 클래스를 이용한 TCP서버 예제CMake 기반 프로젝트 생성 후, CMakeLists.txt 파일에 아래와 같이 항목을 수정 및 추가한다.find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network)find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network)...target_link_libraries(00_TcpServer PRIVATE Qt${QT_VERSION_MAJOR}::Network) find_package 두줄은 set(CMAKE_CXX_STANDARD_REQUIRED ON) 아래 추가하면되고,target_link는 widget을 인자로 삼은targe.. Qt프로그램 2024. 10. 10. Qt데이터베이스 모듈 Qt에서 제공하는 데이터베이스 모듈(API)은 다른 개발 프레임워크에 비해 사용하기 쉽다. Qt 에서 제공하는 데이터베이스 모듈을 이용하면 통일된 API를 이용해 다양한 데이터베이스에 접근할 수 있다. 각 데이터베이스에 접근해 데이터를 이용하기 위해서 제공하는 API 를 사용하지 않고 Qt에서 제공하는 공통된 데이터베이스 모듈을 이용해 Qt 응용 어플리케이션을 개발 할 수 있다. 위의 그림에서 보는 것과 같이 SQLite를 사용하든지 MariaDB를 사용하든지 Qt에서 제공하는 Qt SQL 모듈을 사용하면 각 데이터베이스를 핸들링 할 수 있다.Driver Layer특정 데이터베이스를 연결하기 위한 Low Level Bridge 역할SQL API Layer데이터베이스에 연결하기 위한 클래스를 제공하며 .. Qt프로그램 2024. 10. 9. Model and View Qt에서는 다음 그림에서 보는 것과 같이 표와 같은 위젯에 데이터를 표시하기 위한 위젯으로 QListWidget, QTableWidget, QTreeWidget, QListView, QTableView, QTreeView, QColumnView 등 다양한 클래스를 제공한다. QListWidget 은 QListView와 UI가 동일하다. 하지만 QListWidget 과 QListView 는 데이터를 삽입/수정/삭제 하는데 차이가 있다. 클래스 이름의 마지막에 View 대신, Widget 이라는 단어를 사용한 클래스들은 아래 그림에서 보는 것과 같이 데이터를 직접 삽입/수정/삭제 할 수 있는 멤버 함수를 제공한다. 클래스 이름 마지막에 Widget 이라는 단어가 쓰인 위젯 클래스들은 모두 직접 데이터를 삽입.. Qt프로그램 2024. 10. 9. Container Classes Container 클래스는 특정 유형의 데이터를 집합 또는 배열 형태로 저장하는데 사용한다.Qt에서 제공하는 Container는 C++의 STL에서 제공하는 Container를 대체해 사용할 수 있다.QHashQHash 클래스는 해시 테이블 기반의 Dictionary를 제공한다. 데이터를 저장하는 방식은 Key, Value 가 Pair(쌍)로 저장 된다.Key 값으로 찾고자 하는 데이터를 빠르게 검색 할 수 있는 기능을 제공한다.QHash는 QMap과 매우 비슷한 기능을 제공하지만 내부 알고리즘은 QMap 보다 빠르다.QHash hash;hash["one"] = 1;hash["three"] = 3;hash["seven"] = 7;QHash에 Key, Value를 쌍으로 저장하기 위한 방법으로 insert.. Qt프로그램 2024. 10. 8. QMainWindow 를 이용한 GUI 구현 지금까지 Qt를 이용한 GUI 기반의 위젯을 윈도우 상에 배치하는 예제를 다루어 보았다. 지금까지 다룬 방식은 QWidget 을 이용해 한 개의 윈도우 화면만 존재하는 방식으로 GUI를 구성하였다.하지만 기능이 복잡하고 사용자에게 많은 기능을 제공해야 하는 경우 GUI 구현 시, QWidget 보다는 QMainWindow 를 이용해 GUI를 구현하는 것이 사용자에게 직관적인 GUI를 제공할 수 있을 것이다.예를 들어 Menu Bar, Toolbars, Status Bar, Dock Widget, Central Widget 등으로 위젯들을 특정 영역에 배치할 수 있다.그리고 Qt는 MDI(Multi Document Interface) 방식을 구현할 수 있다.QMdiArea 클래스를 이용한 MDI 기반의 G.. Qt프로그램 2024. 10. 8. 다이얼로그 다이얼로그는 어플리케이션이 동작 중에 이벤트가 발생했을 때 사용자에게 메시지를 전달하기 위한 목적으로 사용된다. 그리고 사용자로부터 입력 값을 받거나 여러 개 중 하나를 선택할 수 있는 GUI를 제공한다. 종류설명QInputDialog사용자로부터 값을 입력 받을 수 있는 다이얼로그QColorDialog특정 컬러를 선택할 수 있는 다이얼로그QfileDialog파일 또는 디렉토리를 선택하는 GUI 인터페이스를 제공QFontDialog폰트를 선택하기 위한 다이얼로그QProgressDialog퍼센트와 같은 진행사항을 보여주기 위한 다이얼로그QMessageBox모달 방식의 다이얼로그QInputDialogQInputDialog 클래스는 사용자로부터 값을 입력 받을 수 있다.getInt( ) 멤버 함수QInputDi.. Qt프로그램 2024. 10. 8. Qt Designer 를 이용한 GUI 설계 Qt 는 원하는 GUI 를 쉽게 빠르게 구현할 수 있도록 Qt Designer 를 제공한다. QtDesigner 는 사용자가 GUI 상에 배치할 위젯을 마우스로 드래그 하면서 위젯을 배치할 수 있다. 확장자가 ui 파일인 GUI 파일은 아래 소스코드와 같이 XML 포맷으로 되어 있다. 이 파일은 사용자가 마우스를 이용해 위젯을 배치하면 Qt Creator 의 Designer 툴이 자동으로 XML 로 작성한다. 그리고 빌드를 하게 되면 XML 로 되어 있는 GUI 파일을 C++ 소스코드로 변환 후 빌드 한다. Widget 0 0 338 178 Widget Qt Designer 를 이용한 예제새프로젝트 생성 → Qt Widgets Application → CMake →.. Qt프로그램 2024. 10. 8. Signal and Slot 잠깐 알고 갑시다!! Qt는 이벤트를 처리하기 위한 메커니즘으로 시그널(Signal)과 슬롯(Slot)을 사용한다.예로 어떤 버튼이 클릭했다는 행위는 Qt에서 시그널(Signal) 이라고 한다. 그리고 시그널이 발생하면 호출 하는 함수를 슬롯(Slot) 함수라고 한다. 시그널 이라는 이벤트가 발생하면 시그널과 연결된 슬롯 함수가 호출된다. 네트워크 채팅 프로그램을 Qt의 시그널 슬롯을 사용하지 않고 채팅 프로그램을 개발한다고 가정해보자. 여러 개의 쓰레드(Thread) 구조의 프로그램을 개발해야 한다. 하지만 Qt에서 시그널과 슬롯을 사용하면 쓰레드를 사용하지않고도 간단하게 채팅 프로그램을 구현할 수 있다. Qt에 제공하는 모든 GUI 위젯은 미리 정해진 다양한 시그널을 가지고 있다. 예를 들어 A라는 .. Qt프로그램 2024. 10. 8. Layout Layout이란?QWidget 클래스의 setGeometry( ) 멤버 함수를 이용해 GUI 상에서 특정 X, Y 좌표로위젯을 배치하게 되면 윈도우의 크기가 변경될 때 위젯의 위치가 변경되지 않는다.하지만 레이아웃을 이용하면 윈도의 크기가 될 때마다 동적으로 GUI 상에 위젯들의 크기도 동적으로 변경된다.윈도우의 크기가 변경되면 레이아웃은 위젯들을 최적의 위치에 정렬되어 일관된 크기의 모양을 유지할 수 있도록 해준다. 다음 표는 Qt에서 주로 사용되는 레이아웃 클래스들 이다.클래스설명QHBocLayout위젯들을 가로 방향으로 배치QVBocLayout위젯들을 세로 방향으로 배치QGridBocLayout위젯을 그리드(Grid) 또는 바둑판 스타일로 배치QHBocLayout위젯을 2열로 배치하는 형식 #inc.. Qt프로그램 2024. 10. 8. Qt GUI widgets(2) 이전 장에서는 소스코드를 일일히 분석하면서 해보았지만, 현재 주어진 시간내에서 모든 기능의 소스코드를 분석 할 수는 없을 것 같다. 따라서, 일단 디자인틀이 없이 코드만으로 구현할 수 있는 기능은 이정도가 있다 까지만 정리하고 넘어가기로 한다.QTime 클래스와 QTimeEdit 위젯 클래스QTime 클래스는 시간을 표시하거나 특정 조건에 비교 등 어플리케이션 개발에 필요한시간 관련 기능을 쉽게 구현할 수 있다. QTimeEdit는 QTime 클래스로부터 얻어온 시간을 GUI인터페이스 상에 표시할 수 있는 기능을 제공한다.QDateTime 클래스와 QDateTimeEdit 위젯QDateTime 클래스는 날짜와 시간을 함께 다룰 수 있는 클래스 이며 QDateTimeEdit 클래스는 날짜와 시간을 표시할 .. Qt프로그램 2024. 10. 8. 이전 1 2 다음