Qt5에서 제공하는 가상키보드(Qt Virtual Keyboard)를 사용하는 방법에 대해서 설명한다. 다만 Qt Wayland환경에서 사용하는 방법은 설명하지 않으므로 자세한 내용은 다음글을 참고하면 된다. https://doc.qt.io/qt-5/qtvirtualkeyboard-deployment-guide.html
가상키보드가 화면에 보여지기 위한 벙법에는 두가지가 있다.
데스크탑(Windows 또는 Linux/X11 환경) : 이 경우 응용프로그램을 수정 할 필요가 없이 키보드는 자체적인 최상위 창으로 보여지게된다.
임베디드 장치(특히 eglfs 같은 환경) : 이 경우 응용프로그램의 QML에 InputPanel 을 배치함으로써 화면에 보여진다. 멀티 윈도우를 지원하지 않는 (윈도우 시스템이 없는)환경에서는 필수이고 데스크탑 환경에서는 선택적으로 사용할 수 있다.
사용 방법은 플러그인 프로젝트 파일에서 자동으로 선택된다. (컴파일 시점에)
두 가지 방법 모두에서 응용 프로그램은 QT_IM_MODULE 환경 변수를 설정하여 플러그인을로드해야한다.
응용프로그램의 main함수에서 설정하거나
int main(int argc, char *argv[])
{
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
...
}
셸에서 환경변수를 설정한다.
데스크탑의 경우 더 이상 할게 없지만 아닌 경우는 응용프로그램의 QML에서 InputPanel을 사용하여 인스턴스화해야 한다.
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import QtQuick.VirtualKeyboard 2.1
Window {
id: window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
TextField{
width: 250
height: 70
anchors.top: parent.top
anchors.topMargin: 30
anchors.horizontalCenter: parent.horizontalCenter
}
InputPanel {
id: inputPanel
z: 99
x: 0
y: window.height
width: window.width
states: State {
name: "visible"
when: inputPanel.active
PropertyChanges {
target: inputPanel
y: window.height - inputPanel.height
}
}
transitions: Transition {
from: ""
to: "visible"
reversible: true
ParallelAnimation {
NumberAnimation {
properties: "y"
duration: 250
easing.type: Easing.InOutQuad
}
}
}
}
}
라즈베리파이3에서 욕토(yocto)로 빌드한 임베디드 리눅스 및 eglfs 환경으로 qtvirtualkeyboard를 사용한 화면.
2019.06.17 13:27
2019.06.17 15:45
qtvirtualkeyboard 플러그인이 있나요? 먼저 플러그인 라이브러리가 있는지 보시고 없으면
라즈비안 운영체제에서는 아래 명령으로 간단하게 설치가능합니다.
sudo apt update -y
sudo apt install -y qtvirtualkeyboard-plugin
그리고 x11 환경에서는 아래 코드만 main 함수에 넣어주면 되요!
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
2019.06.18 09:49
sudo apt update -y는 성공했습니다.
pi@raspberrypi:~ $ sudo apt install -y qtvirtualkeyboard-plugin
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
E: qtvirtualkeyboard-plugin 패키지를 찾을 수 없습니다
2019.06.18 09:59
개발환경
pi@raspberrypi:~ $ qmake -version
QMake version 3.0
Using Qt version 5.3.2 in /usr/lib/arm-linux-gnueabihf
2019.06.19 00:52
아무래도 apt로 설치하는 건 우분투 18.04 에서 유효한듯하네요..
라즈베리파이에서 qt가상키보드를 직접 컴파일을 하시면 될 듯합니다.
저의 경우 라즈비안 처음 설치 후 아래순서로 진행 했습니다. (apt install 하면 Qt5.7로 설치되네여.)
// 의존성 패키지 설치
sudo apt install cmake build-essential git
sudo apt install qt5-default qtbase5-dev qt5-qmake libqt5gui5 qtscript5-dev qtquickcontrols2-5-dev libqt5network5 qtdeclarative5-dev
sudo apt install qml-module-qtquick*
sudo apt install qml-module-qt-labs-folderlistmodel
sudo apt-get install libqt5svg5-dev
sudo apt install qtbase5-private-dev
// qtvirtualkeyboard 소스코드 컴파일
pi@raspberrypi:~ $ git clone git://code.qt.io/qt/qtvirtualkeyboard.git
pi@raspberrypi:~ $ cd qtvirtualkeyboard/
pi@raspberrypi:~/qtvirtualkeyboard $ git checkout 5.7
pi@raspberrypi:~/qtvirtualkeyboard $ qmake
pi@raspberrypi:~/qtvirtualkeyboard $ make
// 컴파일 후 qml 및 플러그인 디렉토리 복사
pi@raspberrypi:~/qtvirtualkeyboard/qml $ sudo cp -r QtQuick/ /usr/lib/arm-linux-gnueabihf/qt5/qml/
pi@raspberrypi:~/qtvirtualkeyboard/plugins $ sudo cp -r platforminputcontexts/ /usr/lib/arm-linux-gnueabihf/qt5/plugins/
초간단 qml로 만든 후 실행해보면 아래 처럼 나옵니다. C++ 위젯(예: QLineEdit등)등으로 개발해도 해당 위젯을 클릭하면 최상위 창으로 나올겁니다.
2019.06.19 11:23
마지막으로 하나만 더 여쭤봐도 될가요...
일단 가상키보드는 문제없이 잘뜹니다!!!
1. 하지만 문제는 기존 MainWindow위에 가상키보드가 검정색 배경으로 다가려서 글씨입력하는 상황을 볼수없습니다..
키보드는 하단에 위치하지만 상단이 모두 검정색 배경으로 변해버립니다 ㅠㅠ
2. 가상키보드에서 src/config/config.pri 파일에 CONFIG += lang-en_GB lang-ko_KR 추가하여 한글/영어 둘다 쓸수있도록 하였는데 문제는 한글입력시 eg.ㅎㅏㄴㄱㅡㄹ 이런식으로 다 띄어쓰기되어 표시되어버립니다...
2019.06.19 13:59
배경이 검정색으로 나오는 경우 xcb관련 라이브러리 있는지 보시고 아래 처럼 실행해보세요.
$ QT_XCB_GL_INTEGRATION=xcb_egl ./myapp
2019.07.26 06:19
안녕하세요. 질문이 있습니다.
현재 eglfs 응용 프로그램을 작성하는 중입니다.
여기에 qml virtual keyboard를 넣고 싶은데..
위에 설명해주신 예제에 나와있는
Window {
id: window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
이것같은 경우는 현재 제 MainWindow가 되야 하는건가요?
혹시 mainwindow가 따로 있는 상황에서 가상 키보드를 추가하려면
qml파일을 어떻게 수정해야 하는지 해당 부분에 대해서 조금 더 설명해주실 수 있으신지요?
2019.07.26 11:24
QT_IM_MODULE 설정하시고, 키보드를 사용하고자하는 QML에서 InputPanel을 사용하면됩니다. main qml에 배치한 이유는 키보드 인스턴스를 하나만 생성하고 글로벌로 동작시키기 위함입니다~
2019.08.22 09:22
Qt virtualkeyboard는 GPL / 상용 라이센스 아닌가요?
2019.08.22 15:24
Qt5.7부터 Qt Virtual Keyboard를 LGPL3로 사용가능합니다.
2019.09.05 11:13
https://doc.qt.io/qt-5/qtvirtualkeyboard-index.html
Qt5 의 virtual keyboard 모듈 설명 페이지의 라이센스부분을 보면
commercial / GNU gpl v3 이라고 명시 되어 있습니다.
LGPL이 아닌듯 한데요..
Qt Virtual Keyboard is available under commercial licenses from The Qt Company. In addition, it is available under the GNU General Public License, version 3. See Qt Licensing for further details.
2019.09.05 18:17
제가 잘못 알고 있었던 거 같습니다. GPL라이센스가 맞습니다. 댓글 감사합니다~
2019.11.06 21:56
안녕하세요 !! 위에 라즈베리파이에 설치하는 코드 따라서 설치해봤는데 아무리 해도 실행이 안되더라구요.. 어떻게 실행시키는지 알려주실 수 있으실까요 ㅠㅠ
2019.11.08 13:05
직접 컴파일 또는 apt로 설치를 시도하셨나요? 라즈베리파이 및 운영체제 버전은 어껀 것을 사용하시는지요?
2019.11.08 20:15
2019.11.10 18:38
직접 컴파일 하신거라면 Qt버전등을 체크해보셔야합니다. 라즈비안의 최신버전(Buster)을 사용하신다면 sudo apt install -y qtvirtualkeyboard-plugin 명령으로 설치하는 걸 추천드립니다.
안녕하세요.
라즈베리파이3- 라즈비안에서 QT로 프로그램을 개발중입니다.
가상키보드를 띄우고 싶은데... QT C++로 구성되있는 GUI프로그램에서 QML InputPanel을 어떻게 띄울수있는지 궁금합니다... 혹시 소스예제라도 있으면 부탁드려요 ㅠㅠㅠ