我在寻找虚拟键盘的尺寸方面遇到了困难。下面是一个示例:
Rectangle {
Component.onCompleted: {
Qt.inputMethod.visibleChanged.connect(resizeForKeyboard)
}
Component.onDestruction: {
Qt.inputMethod.visibleChanged.disconnect(resizeForKeyboard)
}
function resizeForKeyboard(){
console.log('Visibility changed!!!');
var keys = Object.keys(Qt.inputMethod.keyboardRectangle);
var rect = Qt.inputMethod.keyboardRectangle;
//A simple script I have for debugging, this loops
//through the keys and prints all properties
DataMethods.printObject(keys, '[INPUT]');
DataMethods.printObject(rect , '[RECTANGLE]');
}
//using the controls to save time
TextField {
focus: true //force keyboard to show up.
}
}
datamethods.js(相关方法)
/**
* This method prints an object to the console for debug purposes
* obj -> the objec to print
* prefix -> the prefix to append "[prefix] -> "...
* props -> a list of properties to use, otherwiese all will be printed
*/
function printObject(obj, prefix, props) {
if(!prefix)
prefix = "obj";
if(obj){
console.log(prefix + obj + "->" + typeof obj);
if(props){
for(var p in obj)
console.log('\t' + prefix + "["+ p + "] -> '" + obj[p] + "'");
} else {
for(var p in obj)
console.log('\t' + prefix + "["+ p + "] -> '" + obj[p] + "'");
}
} else {
console.log(prefix + "is null");
}
}
这是输出结果:
[INPUT]objectName,cursorRectangle,keyboardRectangle,visible,animating,locale,inputDirection,destroyed,destroyed,objectNameChanged,deleteLater,_q_reregisterTimers,cursorRectangleChanged,keyboardRectangleChanged,visibleChanged,animatingChanged,localeChanged,inputDirectionChanged,show,hide,update,reset,commit,invokeAction->object
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][0] -> 'objectName'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][1] -> 'cursorRectangle'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][2] -> 'keyboardRectangle'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][3] -> 'visible'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][4] -> 'animating'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][5] -> 'locale'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][6] -> 'inputDirection'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][7] -> 'destroyed'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][8] -> 'destroyed'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][9] -> 'objectNameChanged'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][10] -> 'deleteLater'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][11] -> '_q_reregisterTimers'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][12] -> 'cursorRectangleChanged'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][13] -> 'keyboardRectangleChanged'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][14] -> 'visibleChanged'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][15] -> 'animatingChanged'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][16] -> 'localeChanged'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][17] -> 'inputDirectionChanged'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][18] -> 'show'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][19] -> 'hide'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][20] -> 'update'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][21] -> 'reset'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][22] -> 'commit'
D/Qt (30122): qrc:js/datamethods.js:153 (printObject): [INPUT][23] -> 'invokeAction'
D/Qt (30122): qrc:js/datamethods.js:147 (printObject): [RECTANGLE]QRectF(0, 0, 0, 0)->object
我可能正在完全错误的路上,我希望有一种方式来处理它。我需要获取设备键盘的大小,以便在我的UI中做出响应,而不是将控件深埋在其下方(这样用户可以继续滚动表单)。
正如您所看到的,Qt.inputMethod的keyboardRectangle属性似乎是默认值。
我应该从哪里检索此信息?该信号似乎正确,因为它在虚拟键盘打开/关闭时会触发?
inputMethod()
资源并没有完全实现。我找到了一种使用Java获取键盘尺寸的方法,但我不确定您是否只想要Qt的方式来获取这些信息。 - Antonio Dias