Russian Qt Forum

Qt => Общие вопросы => Тема начата: Nox Metus от Август 20, 2008, 10:32



Название: Как создать QWidget потомком не QT окна?
Отправлено: Nox Metus от Август 20, 2008, 10:32
Я пытаюсь написать плагин для Total Commander с помощью QT. Плагин — это dll, которая обязана реализовать следующую простую функцию:
Код:
HWND __stdcall ListLoad(HWND parentWin, char* fileToLoad, int ShowFlags);
Т.е. мне нужно показать QWidget, который будет потомком (в смысле Windows) для parentWin. parentWin, естественнно, к QT отношения не имеет. Я безуспешно пробовал следующий подход:
Код:
class ListerWidget :
  public QWidget
{
public:
  ListerWidget(HWND listerWin) {
    // нужно сохранить и восстановить WindProc, т.к. QT ее затрет,
    // у окна листера она и так уже есть и QT WindProc ему не к чему
    LONG oldWinProc = GetWindowLong(listerWin, GWL_WNDPROC);
    create(listerWin, false, false);
    SetWindowLong(listerWin, GWL_WNDPROC, oldWinProc);
  }
};
Далее где-то внутри ListLoad:
Код:
      ListerWidget *lister = new ListerWidget(parentWin);
      MyWidget *w = new MyWidget(lister);
      w->show();

Все зашибись работает, кроме того, что MyWidget не показывается в листере. Что не так? Можно ли поступить как-нибудь по-другому?


Название: Re: Как создать QWidget потомком не QT окна?
Отправлено: Tonal от Август 20, 2008, 10:52
Ответил в http://forum.academ.org/index.php?s=&showtopic=327100&view=findpost&p=5650669