2012-08-16 75 views
3

我有qml按鈕文件,我希望在鍵盤可見時在鍵盤上方可見。始終可見qml

我只想知道我應該如何處理我的QmlApplicationViewer,這樣我的小qml塊總是可以在所有其他應用程序之上看到,但是您仍然可以訪問下面的應用程序。

我已經實現了一種讓文件變得可見的方式,當鍵盤可見時,我可以很容易地在鍵盤上方得到它,但現在我正在努力防止它偷取焦點並關閉鍵盤,因爲當鍵盤被打開時,我的按鈕出現並且鍵盤關閉。當我關閉我的應用程序時,按鈕消失,鍵盤在我最初打開的應用程序中重新打開。我希望這是一個補充鍵盤功能的後臺任務,按鈕將允許語音輸入。

main.qml:

import QtQuick 1.1 
import com.nokia.symbian 1.1 

Button{ 
    signal keyActive() 

    x: 0 
    y: 0 
    text: "Voice" 
    property bool bob: inputContext.visible 
    onBobChanged: console.log("keyboard" + bob), bob ? keyActive() : null 
} 

main.cpp中:

#include <QtGui/QApplication> 
#include "qmlapplicationviewer.h" 
#include <QObject> 
#include <QGraphicsObject> 

Q_DECL_EXPORT int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    QmlApplicationViewer viewer; 
    viewer.setMainQmlFile(QLatin1String("qml/topwidget/main.qml")); 

    viewer.setWindowFlags(Qt::WindowStaysOnTopHint); 
    viewer.setAttribute(Qt::WA_ShowWithoutActivating); 
    viewer.move(10, 20); 
    viewer.releaseKeyboard(); 
    viewer.show(); 

    QObject *rootObject = viewer.rootObject(); 
    QObject::connect(rootObject, SIGNAL(keyActive()), &viewer, SLOT(raise())); 

    return app.exec(); 
} 

PS。我知道當鍵盤打開和關閉時,我只想知道如何在沒有鍵盤自動關閉的情況下顯示我的按鈕?

+0

你能不能安裝一個事件過濾器,或訂閱以某種方式鍵盤事件。然後,一旦你受到密鑰狀態變化的影響 - 你可以相應地處理它:http://www.developer.nokia.com/Community/Discussion/showthread.php?235025-Qt-N97-Detecting-keyboard-open – FaddishWorm 2012-08-24 14:50:38

+0

是的,但我問的是如何處理它? – Gerharddc 2012-08-28 16:57:51

+0

一旦我知道鍵盤處於活動狀態,您是否知道如何處理它? – Gerharddc 2012-09-04 03:41:08

回答

0

您正在操縱xy但您想要控制的是重疊,即z。所以你可以通過給它一個特殊的z值來影響總是在最上面的東西。在這裏看到:

http://qt-project.org/doc/qt-4.8/qml-item.html#z-prop

+0

這似乎只是在Viewer中繪製時相對的,但對於查看器本身相對於其他應用程序的渲染組件以及操作系統的渲染組件的位置沒有影響 – Gerharddc 2013-10-09 13:35:44