LINUX.ORG.RU

Унаследоваться от ApplicationWindow

 ,


0

2

Собсно, сабж. Если ли способ как это сделать? У меня в качестве центрального класса выступает MyWindow { ... } в qml, который в крестах реализован как наследник QQuickWindow и в майне указан как тип через qmlRegisterType<MyWindow>(...)

Проблема в том, что в отличие от Window (который есть просто QQuickWindow), ApplicationWindow реализован в qml, а не в крестах. А мне очень захотелось вкорячить ToolBar, но нужные header и footer есть в ApplicationWindow, а в простом Window приткнуть их некуда. Попытка сделать свой header пока фейлится - видимо контролы нормально работают с ApplicationWindow, в частности боковая панель Drawer кладет болт и перекрывает верхнюю штуковину.

Есть какой-то способ с минимумом костыльности? Я пробовал qmlRegister и свой класс пробрасывать с именем «Window» - все крашится. И как вариант - упереть ApplicationWindow.qml к себе простым копированием и заменить там Window на MyWindow, но это как-то совсем уныло и костыльно - в других версиях там чего-нибудь поменяют, и каждый раз такой фигней заниматься?

Собсно, qt-маги и qml-джедаи, жду ваших советов и предложений.

★★

Хм. Вот ведь блин, а ведь во вторых контролах даже и не так все. Там не qml файл, а какой-то невидимый QQuickApplicationWindow в QtQuick.Templates

Любопытно...

wolph ★★
() автор топика

Ладно, пофиг. Вопрос решен, хоть и не так как я думал изначально.

От QQuickApplicationWindow никак не унаследоваться - оно в приватном api, но оно и не нужно. Переделал свой QQuickWindow в QObject и добавил в setContextObject.

wolph ★★
() автор топика
Ответ на: комментарий от dib2

Я просто раньше так всегда делал - топовое окно делал классом на крестах, в нем делал нужные свойства и методы с сигналами, а в qml удобно дергать просто myMethod() а не prop.myMethod() - так как окно во всем дереве объектов на самом верху.

Собсно, теперь после того как я нащупал contextObject - больше так можно не делать, вместо окна все это делать в простом QObject и ставить его контекстным, а вместо своего MyWindow использовать обычный ApplicationWindow.

wolph ★★
() автор топика
Ответ на: комментарий от wolph

От QQuickApplicationWindow никак не унаследоваться - оно в приватном api

Чёй-то, qml-джедай знает как. В .pro файле добавь

QT += quick-private qml-private
И подключай через #include <private/some_p.h>

fluorite ★★★★★
()
Ответ на: комментарий от fluorite

И подключай через #include <private/some_p.h>

Ага, щас. Для этого нужно иметь что подключать. А я с десяток пакетов перерыл - нужного хедера ни один пакет не предоставляет, так что они наверное будут только если исходники распаковать.

wolph ★★
() автор топика
Ответ на: комментарий от fluorite

Из вторых. В первых то я точно помню, что там это просто ApplicationWindow.qml с кучей лапши внутри.

wolph ★★
() автор топика
Ответ на: комментарий от CrossFire

Так я же уже написал - в конечном итоге я так и сделал, а нужные свойства/методы пробросил через setContextObject, то что раньше было наследником QQuickWindow стало простым QObject'ом.

wolph ★★
() автор топика
Ответ на: комментарий от wolph

Не надо сорцы качать, хидер лежит в

5.8/gcc_64/include/QtQuickTemplates2/5.8.0/QtQuickTemplates2/private/qquickapplicationwindow_p.h
В .pro добавить quickcontrols2-private

fluorite ★★★★★
()
Последнее исправление: fluorite (всего исправлений: 1)
Ответ на: комментарий от CrossFire

Вообще давно пора бы кутешникам сделать квик публичным api, как в Qt3D, например. Чтобы выбор был — хочешь, пиши в qml, хочешь — в c++.

fluorite ★★★★★
()
Ответ на: комментарий от fluorite

Ну так крохи в публичном апи есть - всякие QQuickItem (Item {}) да QQuickWindow(Window{}). И QQuickWidget.

Больше всего раздражает, что в Image нельзя подсунуть QImage. А все эти костыли с ImageProvider - неудобно.

wolph ★★
() автор топика
Ответ на: комментарий от fluorite

Ну, если скачать с сайта дигии Qt (с исходниками, хотя может и без них) - может быть. А у меня в системе:

$ ls /usr/include/qt5/QtQuickTemplates2
QtQuickTemplates2  QtQuickTemplates2Depends  QtQuickTemplates2Version  qtquicktemplates2version.h

wolph ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.