34

Qt4 アプリケーションを Qt5 に変換しようとしています。私が理解できなかった唯一のことは、ウィジェットのHWNDを取得する方法です。プログラムはEcWin7を使用して Windows 7 以降のタスクバー アイコンに進行状況を表示しますが、HWNDが必要です。Q_WS_WINQ_OS_WINに変更した後、lib 自体は正常にコンパイルされるようです) Windows 上の Qt4 では、 WIdはHWNDの単なる typedef であったため、これは問題ありませんでした。Qt5 では、これはもう当てはまりません。手がかりとなるメーリング リストの投稿を見つけましたが、 QPlatformNativeInterfaceは Qt5 のパブリック API の一部ではなくなったようです。

プログラムはEcWin7.init(this->winId());を呼び出します。このIDをHWND IDに変換する方法、またはこれを取得する他の方法が必要です。

4

5 に答える 5

25

Qt5 では、次のようwinEventに置き換えられましたnativeEvent

bool winEvent(MSG* pMsg, long* result)

今でしょ

bool nativeEvent(const QByteArray & eventType, void * message, long *result)

そして、EcWin7::winEventあなたはにキャストvoidする必要がありますMSG

bool EcWin7::winEvent(void * message, long * result)
{
    MSG* msg = reinterpret_cast<MSG*>(message);
    if (msg->message == mTaskbarMessageId)
    {
      ...

アプリケーションを動作させることができました!置き換えるだけです:

 mWindowId = wid;

 mWindowId = (HWND)wid;
于 2013-04-21T23:59:08.117 に答える
11
#include <QtGui/5.0.0/QtGui/qpa/qplatformnativeinterface.h>

static QWindow* windowForWidget(const QWidget* widget) 
{
    QWindow* window = widget->windowHandle();
    if (window)
        return window;
    const QWidget* nativeParent = widget->nativeParentWidget();
    if (nativeParent) 
        return nativeParent->windowHandle();
    return 0; 
}

HWND getHWNDForWidget(const QWidget* widget)
{
    QWindow* window = ::windowForWidget(widget);
    if (window && window->handle())
    {
        QPlatformNativeInterface* interface = QGuiApplication::platformNativeInterface();
        return static_cast<HWND>(interface->nativeResourceForWindow(QByteArrayLiteral("handle"), window));
    }
    return 0; 
}
于 2013-01-24T11:27:56.387 に答える
2

あなたは試すことができます:

(HWND)QWidget::winId();
于 2013-01-09T22:23:55.060 に答える
2

winId() は、Qt 5.1 で機能しました。少なくとも、使用している場合は同じ値になります

bool Widget::nativeEvent(const QByteArray & eventType, void * message, long * result)
{
    MSG* msg = reinterpret_cast<MSG*>(message);
    qDebug() << msg->hwnd;

    return false;
}

qDebug() << winId();
于 2013-07-13T05:12:40.867 に答える
1

この機能を試してください:QWindowsNativeInterface::nativeResourceForWindow

于 2012-12-27T09:33:54.103 に答える