Как получить уникальный WindowRef в закрепляемом приложении Qt на Mac - PullRequest
0 голосов
/ 20 июля 2009

Как получить уникальный WindowRef из приложения Qt, которое включает в себя закрепленные окна на Mac?

Мой код сводится к:

int main(int argc, char* argv[])
{
   QApplication* qtApp = new QApplication(argc, argv);
   MyQMainWindow mainwin;
   mainwin.show();
}

class MyQMainWindow : public QMainWindow
{
   //...
   QDockWidget* mDock;
   MyQWidget* mDrawArea;
   QStackedWidget* mCentralStack;
};

MyQMainWindow::MyQMainWindow()
{
   mDock = new QDockWidget(tr("Docked Widget"), this);
   mDock->setMaximumWidth(180);
   //...
   addDockWidget(Qt::RightDockWidgetArea, mDock);

   mDrawArea = new MyQWidget(this);
   mCentralStack = new QStackedWidget();
   mCentralStack->addWidget(mDrawArea);
   // Other widgets added to stack in production code.

   setCentralWidget(mCentralStack);

   //...
}

(Извините, если вышеприведенное не является синтаксически правильным, просто проиллюстрировать это проще, чем описать.)

Я добавил следующий временный код в конец вышеуказанного конструктора:

HIViewRef view1 = (HIViewRef) mDrawArea->winId();
HIViewRef view2 = (HIViewRef) mDock->winId();

WindowRef win1 = HIViewGetWindow(view1);
WindowRef win2 = HIViewGetWindow(view2);

Моя проблема в том, что view1 и view2 различны, но win1 и win2 одинаковы!

Я попробовал следующий эквивалент в Windows:

HWND win1 = (HWND)(mCentralDrawArea->winId());
HWND win2 = (HWND)(mDock1->winId());

На этот раз win1 и win2 различны.

Мне нужно, чтобы дескриптор окна передавался стороннему SDK, чтобы он мог рисовать только в центральной области.

Кстати, я ценю, что метод winId () поставляется с большим количеством предупреждений о переносимости, но о существенном рефакторинге для меня не может быть и речи. То же самое касается использования углерода вместо какао.

Спасибо.

1 Ответ

0 голосов
/ 14 августа 2009

Чтобы закончить, я связался с Qt, который сказал, что это ожидаемое поведение и что для сторонних приложений необычно требовать подобную ссылку в окне. Они предложили посмотреть атрибуты виджета Qt::WA_PaintOnScreen и Qt::WA_NoSystemBackground на виджете.

Помимо этого, я полагаю, исправление будет заключаться в том, чтобы запросить, чтобы сторонний SDK был отредактирован для использования оконных ручек из углерода / какао.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...