正在使用嵌入式linux开发板进行qt开发,需要使用虚拟键盘,但是当我将模拟器正常运行的代码移植到开发板后,qtvirtualkeyboard键盘却无法弹出,能否给予一些建议,谢谢!
qt版本:5.12.7
QT环境构建:通过buildroot构建
交叉编译后生成的库在开发板上的路径:/usr/lib
程序运行路径:/tmp
当我使用qwidget的示例代码时,开发板上不能弹出键盘,而当我使用quick 创建一个示例时,键盘则可以弹出
qwidget示例代码:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
lineEdit = new QLineEdit(this);
lineEdit->setGeometry(30,100,600,100);
lineEdit->setFocusPolicy(Qt::StrongFocus); // 确保可以接收焦点
}
int main(int argc, char *argv[])
{
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
quickt示例代码:
int main(int argc, char *argv[])
{
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
qml:
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.VirtualKeyboard 2.4
import QtQuick.Controls 2.12 // 这里的x应该替换为你使用的Qt版本对应的版本号
Window {
id: window
visible: true
width: 720
height: 680
title: "Hello World"
flags: Qt.Window | Qt.FramelessWindowHint
Column {
spacing: 10
anchors.centerIn: parent
TextField {
id:textUser
placeholderText: qsTr("User name")
}
}
InputPanel {
id: inputPanel
z: 99
x: 0
y: window.height
width: window.width
Component.onCompleted: {
VirtualKeyboardSettings.activeLocales = ["en_GB","zh_CN"]
VirtualKeyboardSettings.locale = "en_GB"
}
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
}
}
}
}
TextField {
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
}
}