일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- HTTP
- Scaffold
- Flutter 강좌
- MainAxisAlignment
- flutter
- CrossAxisAlignment
- sqlite
- FutureBuilder
- Flutter 예제
- Flutter Tutorial
- InkWell
- node.js
- Flutter 앱 배포
- Snackbar
- Hello World
- Row Widget
- Row
- Networking
- listview
- ListView.builder
- Image.network
- navigator
- Load Image
- Flutter Example
- AppBar
- Column Widget
- 반석천
- Cached Image
- WillPopScope
- ListTile
- Today
- Total
꿈꾸는 시스템 디자이너
QQuickWidget 사용법 본문
QQuickWidget은 QT에서 제공하는 QWidget 중 하나로 QQuickWidget을 Qt Quick를 담아 표현하는 QWidget이라 할 수 있다.
Qt 문서에 따르면, Qt Quick란 QML 어플리케이션을 작성하는 표준 라이브러리로, 쉽게 풀이하면 QML 문서로 작성된 컴포넌트가 Qt Quick라 할 수 있겠다.
Qt Quick를 실행시키고 화면에 출력하기 위한 방법은 다양한데, 그 중 하나가 QQuickWidget에 담아서 출력하는 것이다.
위의 그림과 같이 하나의 QWidget에 세개의 버튼을 배치하고 버튼을 클릭할 때마다 해당 QQuickWidget을 출력한다. 이때 각 QQuickWidget 마다 고유의 QML 파일을 가진다.
<qquick1.qml>
import QtQuick 2.0 Rectangle { width: 360 height: 270 color: "#e3b3b3" Text { text: qsTr("QQuickQML1") textFormat: Text.AutoText style: Text.Normal font.bold: true verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter anchors.fill: parent font.pixelSize: 15 } } |
QQuickWidget에 담겨 화면에 표시될 Quick를 기술하는 QML 파일(QQuick1.qml)은 위와 같다. QQuick2.qml과 QQuick3.qml도 동일한 구조를 가진다.
<myqquickwidget.h>
#ifndef MYQQUICKWIDGET_H #define MYQQUICKWIDGET_H #include <QQuickWidget> #include <QtCore/QtCore> #include <QDebug> class MyQQuickWidget : public QQuickWidget { Q_OBJECT public: // QQuickWidget을 상속하는 경우 생성자의 아규먼트를 QObject에서 QWidget으로 변경해준다. // parent를 아규먼트로 포함하면서 추가적인 아규먼트를 받고자 할경우 parent 아규먼트가 제일 뒤에 // 오도록 정의한다. MyQQuickWidget(QString source, QWidget *parent = 0); private: QString m_source; signals: public slots: }; #endif // MYQQUICKWIDGET_H |
Quick를 담아 표현할 QQuickWidget의 헤더파일은 위와 같다. QQuickWidget을 상속하는 클래스를 구현한 것으로 생성자의 아규먼트로 QObject가 아닌 QWidget을 받아야 하는 것에 주의해야 한다.
<myqquickwidget.cpp>
#include "myqquickwidget.h" // QQuickWidget을 상속하는 경우 생성자의 아규먼트를 QObject에서 QWidget으로 변경해준다. // parent를 아규먼트로 포함하면서 추가적인 아규먼트를 받고자 할경우 parent 아규먼트가 제일 뒤에 // 오도록 정의한다. // 아규먼트를 변수에 저장하고자 할경우 m_변수(아규먼트) 형식으로 정의하면 바로 대입된다. MyQQuickWidget::MyQQuickWidget(QString source, QWidget *parent) : m_source(source), QQuickWidget(parent) { qDebug() << m_source; this->setSource(m_source); //QML 파일의 경로 this->setGeometry(120,10,360,270); this->show(); } |
CPP 파일의 구조는 위와 같다. m_source는 Quick으로 표현할 QML파일의 경로를 의미한다.
<mainwidget.h>
#ifndef MAINQWIDGET_H #define MAINQWIDGET_H #include <QWidget> #include <QQuickWidget> #include <myqquickwidget.h> namespace Ui { class MainQWidget; } class MainQWidget : public QWidget { Q_OBJECT public: explicit MainQWidget(QWidget *parent = 0); ~MainQWidget(); private slots: // QQuickWidget 선택을 받는 슬롯 void on_pbQuick1_clicked(); void on_pbQuick2_clicked(); void on_pbQuick3_clicked(); private: Ui::MainQWidget *ui; int quickIndex; MyQQuickWidget *m_quickWidget1; MyQQuickWidget *m_quickWidget2; MyQQuickWidget *m_quickWidget3; void hideAllQQuickWidgets(); void showQQuickWidget(int index); }; #endif // MAINQWIDGET_H |
<mainqwidget.cpp>
#include "mainqwidget.h" #include "ui_mainqwidget.h" MainQWidget::MainQWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MainQWidget) { ui->setupUi(this); m_quickWidget1 = new MyQQuickWidget("qrc:/QQuick1.qml",this); m_quickWidget2 = new MyQQuickWidget("qrc:/QQuick2.qml",this); m_quickWidget3 = new MyQQuickWidget("qrc:/QQuick3.qml",this); hideAllQQuickWidgets(); showQQuickWidget(1); } MainQWidget::~MainQWidget() { delete ui; } void MainQWidget::on_pbQuick1_clicked() { showQQuickWidget(1); } void MainQWidget::on_pbQuick2_clicked() { showQQuickWidget(2); } void MainQWidget::on_pbQuick3_clicked() { showQQuickWidget(3); } void MainQWidget::hideAllQQuickWidgets() { m_quickWidget1->hide(); m_quickWidget2->hide(); m_quickWidget3->hide(); } void MainQWidget::showQQuickWidget(int index) { switch(index){ case 1: m_quickWidget1->show(); m_quickWidget1->raise(); break; case 2: m_quickWidget2->show(); m_quickWidget2->raise(); break; case 3: m_quickWidget3->show(); m_quickWidget3->raise(); break; } } |
위의 MainQWidget 클래스에서는 사용자의 버튼 선택을 받아 해당 QQuickWidget을 화면에 보여주는 기능을 수행한다.
'Development > Qt' 카테고리의 다른 글
QT 변수명 동적 할당(Dynamic variable naming in QT) (0) | 2016.05.24 |
---|---|
HTML의 javascript단에서 QT 슬롯 함수 호출 방법 (0) | 2015.12.02 |
QML간의 fuction 호출(Signal/Slot) (0) | 2015.11.25 |
Qt5에서 QtGui를 include해도 위젯들을 사용할 수 없는 경우 (0) | 2015.09.03 |
Qt설치 (Windows) (0) | 2009.04.16 |