[Development] QPlatformInputContext needs more informations

BogDan bog_dan_ro at yahoo.com
Sat Apr 14 21:26:07 CEST 2012


> From: "lars.knoll at nokia.com" <lars.knoll at nokia.com>

> To: bog_dan_ro at yahoo.com; development at qt-project.org
> Cc: 
> Sent: Saturday, April 14, 2012 9:40 PM
> Subject: Re: [Development] QPlatformInputContext needs more informations
> 
> 
> On 4/14/12 8:29 PM, "ext BogDan" <bog_dan_ro at yahoo.com> wrote:
> 
>> Hello,
>> 
>> I checked QPlatformInputContext interface and I think it needs more
>> informations
> 
> Not sure what you're missing. QPlatformInputContext is only there to
> implement support for an input method, and has received quite some testing.
> 

In order to be sure the user sees the entire control and its content I need to know
the control position and its size, otherwise the virtual keyboard may cover the 
control and its content.

> 
> QInputMethod (see QGuiApplication::inputMethod()) is the remaining
> interface that are probably missing right now.
> 
>> 
>> 
>> and also I found one of them a little bit strange.
>> I've learn that using the following code I can get the needed
>> informations about the
>> focused control:
>> 
>>     QInputMethodQueryEvent query(queries);
>>     QGuiApplication::sendEvent(qGuiApp->focusObject(), &query);
>> 
>> 
>> Sadly "query" doesn't contain enough information to correctly 
> display the
>> keyboard
>> and the edit control. I need to know where is and what is the control
>> size on the
> 
> No, but QInputMethod should have the other pieces you need.
>

Ah sorry I didn't know about QInputMethod, I checked it and it seems it
doesn't have the information I'm looking for. I need the know the control
coordinates (position and size). I'm afraid QInputMethod doesn't has this info.

> 
>> screen, because an edit control can be anywhere and it can have any size
>> on the screen,
>> to be sure the user will see the entire control and its content, the
>> screen must be panned
>> or resized (depending on controls size). To fix this problem I just added
>> and
>> implement a new enum element to Qt::InputMethodQuery : "ImRectangle  - 
> The
>> rectangle of the widget in screen coordinates.". I chose screen
>> coordinates and not
>> widget coordinates because I think widget coordinates are useless as long
>> as the
>> focused item is an qobject and it can be anything. This is the reason why
>> I've found
>> Qt::ImCursorRectangle value a little bit strange, IMHO
>> Qt::ImCursorRectangle should
>> represents screen coordinates, not widget coordinates.
> 
> This is wrong. QInputMethod gives that info. The reason this won't work is
> the same as with the microFocusHint in Qt 4. Often the control doesn't
> know when it has been moved around on the screen, so it can't give proper
> feedback to the input method. So use the API in QInputMethod, as it'll
> also work and give correct answers when the widget or QML item has been
> moved around inside the window.
> 

I understand, but QInputMethod doesn't contains the control position and size :(

>> I also attached a small patch which adds ImRectangle to
>> Qt::InputMethodQuery and
>> the needed implementation in qtbase.
>> Before I go further (add the needed implementation to qdeclarative, and
>> push them to
>> codereview) I'd like to know what are your thoughts on this matter .
> 
> See above.
> 
> Cheers,
> Lars
>

Cheers,
BogDan.



More information about the Development mailing list