우선, 제 영어는 유감입니다.Windows에서 FireBreath로 QT 플러그인을 만드십시오
QT로 FireBreath 플러그인을 작성했으며 플러그인이 정상적으로 표시 될 수 있습니다.
하지만 플러그인 창에서 버튼을 클릭해도 아무 일도 일어나지 않았습니다. 그리고 모든 위젯은 이와 같습니다.
하지만 브라우저의 크기를 조정할 때 버튼이 변경되었습니다.
QT에서 이벤트 처리 또는 창 업데이트 작업을 잊어 버렸습니까?
어떤 조언을 주셔서 감사합니다!
QApplication
은 onPluginReady()
함수로 생성됩니다. (다음 m_player
가 QWidget
서브 클래스 주)
void MediaPlayerPlugin::onPluginReady()
{
static int argc=0;
static char **argv={ 0 };
new QApplication(argc, argv);
}
그리고 QWidget
플러그인 윈도우의 자식입니다.
bool MediaPlayerPlugin::onWindowAttached(FB::AttachedEvent *evt, FB::PluginWindow *pluginWindow)
{
FB::PluginWindowWin* wnd = reinterpret_cast<FB::PluginWindowWin*>(pluginWindow);
HWND hwnd = wnd->getHWND();
m_player = new MediaPlayer();
HWND childHwnd = (HWND)m_player->winId();
LONG oldLong = GetWindowLong(hwnd, GWL_STYLE);
::SetWindowLong(hwnd, GWL_STYLE, oldLong | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
::SetWindowLong(childHwnd, GWL_STYLE, WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
::SetParent(childHwnd, hwnd);
FB::Rect pos = wnd->getWindowPosition();
m_player->setGeometry(pos.left,pos.top,pos.right-pos.left,pos.bottom-pos.top);
m_player->show();
return true;
}
고마워, 난 내 문제를 해결했습니다. 그냥'onPluginReady()'함수에 다른 스레드를 만들고 스레드에서'QApplication'을 만듭니다. 그리고 이것은 내게 도움이되었습니다 - [링크] (http : // stackoverflow .com/questions/9777911/how-do-i-create-a-window-in-different-qt-threads) – zh220825