claude에게 qt5 qml 예제를 만들어 달라고 하고 코드 분석중
이전에는 못봤던 Connections 라는 키워드가 눈에 띈다
| // Main.qml ApplicationWindow { id: root // uiController.currentPage 변화 → StackLayout 전환 Connections { target: uiController // Qt5(Qt5.4+)는 함수형 핸들러 onXxxChanged 동일하게 지원 onCurrentPageChanged: { stack.currentIndex = uiController.currentPage } } ColumnLayout { anchors.fill: parent spacing: 0 // ── 페이지 스택 (StackedWidget 대응) ────────────── StackLayout { id: stack Layout.fillWidth: true Layout.fillHeight: true currentIndex: 0 Loader { source: "HomePage.qml" } Loader { source: "DataPage.qml" } Loader { source: "SettingsPage.qml" } } |
engine 에다가 setContextProperty 하는건 engine.load() 이후에 해도 적용되긴 한다.
| // main.cpp // ── 인스턴스 생성 ───────────────────────────────────── SocketClient socketClient; UIController uiController; // ── 소켓 → UI 컨트롤러 시그널 연결 ─────────────────── QObject::connect(&socketClient, &SocketClient::pageChangeRequested, &uiController, &UIController::onPageChange); QObject::connect(&socketClient, &SocketClient::valueChangeRequested, &uiController, &UIController::onValueChange); QObject::connect(&socketClient, &SocketClient::textChangeRequested, &uiController, &UIController::onTextChange); // ── QML 엔진 설정 ───────────────────────────────────── QQmlApplicationEngine engine; // QML에서 'socketClient', 'uiController' 이름으로 접근 가능 engine.rootContext()->setContextProperty("socketClient", &socketClient); engine.rootContext()->setContextProperty("uiController", &uiController); |
| // socketclient.h class SocketClient : public QObject { Q_OBJECT Q_PROPERTY(bool connected READ isConnected NOTIFY connectedChanged) Q_PROPERTY(QString clientAddress READ clientAddress NOTIFY clientAddressChanged) public: explicit SocketClient(QObject *parent = nullptr); ~SocketClient(); bool isConnected() const { return m_socket != nullptr; } QString clientAddress() const { return m_clientAddress; } Q_INVOKABLE void startListening(int port = 9000); Q_INVOKABLE void stopListening(); signals: void connectedChanged(); void clientAddressChanged(); // 파싱된 명령 시그널 void pageChangeRequested(int index); |
| // uicontroller.cpp void UIController::setCurrentPage(int page) { if (m_currentPage == page) return; m_currentPage = page; emit currentPageChanged(); } void UIController::onPageChange(int index) { setCurrentPage(index); } |
[링크 : https://swjs.tistory.com/entry/QTQML-QML의-Connections]
'Programming > qt' 카테고리의 다른 글
| qt5 qml 다국어지원 (0) | 2026.06.30 |
|---|---|
| qt5 qml Q_PROPERTY (0) | 2026.06.30 |
| qt 동적 해상도 대응 (0) | 2026.06.29 |
| QT 다국어 지원, qm 만 교체 할수 있도록 변경 (0) | 2026.06.29 |
| QGraphicsProxyWidget (0) | 2026.06.05 |
