[Interest] Best way to get a QWidget from a device context (HDC)
Thiago Macieira
thiago.macieira at intel.com
Thu Jan 8 00:31:16 CET 2015
On Wednesday 07 January 2015 15:16:56 Jason Dolan wrote:
> I’m stuck with some 3rd party code where the input is a device context
> (HDC), and I need to get the widget it’s associated with.
>
> My current implementation (completely untested as of yet) is:
> QWidget *w = QWidget::find((WId)WindowFromDC(hDC));
>
> #1: I’m not even sure this will work (although I think it will) — I’m coding
> under OS X right now and will have to test on our windows build machine in
> a bit
> #2: This needs to be as fast as possible as this can be called ALOT.
> Any time the function says “find” I get worried about speed…
It's pretty quick:
QWidget *QWidget::find(WId id)
{
return QWidgetPrivate::mapper ? QWidgetPrivate::mapper->value(id, 0) : 0;
}
And QWidgetPrivate::mapper is a QHash<WId, QWidget *>, so this should be O(1)
for the general case.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Interest
mailing list