QQuickWidget не может продвигать

#qt #qquickwidget

#qt #qquickwidget

Вопрос:

У нас возникли проблемы с продвижением виджетов. Когда мы пытаемся продвинуть QQuickWidget в наш класс, мы не можем видеть QQuickWidget как базовый класс, несмотря на другие базовые классы. Однако иногда это появляется, если не делать ничего особенного. Как вы думаете, это ошибка или есть что-нибудь, что можно сделать для решения этой проблемы?

скриншот из Qt Creator

Комментарии:

1. StackOverflow позволяет просто вставлять изображения прямо в вопрос. Не используйте какие-либо внешние сайты для изображений. Просто нажмите Ctrl-C в редакторе скриншотов и Ctrl-V в выбранной точке вопроса. Помните: вопросы и ответы здесь должны оставаться пригодными для использования в «обозримом будущем». Файлообменные сайты просто удаляют контент, когда вы им надоедаете (я серьезно — эти ссылки просто перестают работать через некоторое время, Dropbox не размещает вещи вечно, они обанкротятся днем). Я уверен, что imgur платит хорошие деньги за размещение содержимого их изображений.

2. У нашей компании есть протокол, по которому мы не можем загружать изображения проекта куда-либо, кроме dropbox. Прошу прощения за это.

3. Это также подразумевает, что вы не можете задавать вопросы на SO с изображениями, потому что на SO использование его хостинга изображений действительно является обязательным требованием. Возможно, вы захотите рассмотреть возможность смены работы, когда это возможно — они не выполнят никакой работы или все нарушают это правило. В любом случае, это больная среда для работы — мне жаль, что вы оказались в такой головоломке. Эта политика — неудачная попытка обеспечить «ИТ-безопасность»: они считают, что таким образом смогут контролировать непреднамеренное раскрытие информации. Ну и дела, угадайте, что: Интернет никогда не забывает. Изображение, которое вы опубликовали? Это останется с нами до скончания времен, насколько я знаю.

Ответ №1:

Прежде всего: вам действительно нужно, чтобы дизайнер знал о том, что виджет имеет QQuickWidget тип? Скорее всего, вы этого не делаете, поэтому просто продвигайте его напрямую из QWidget . В конце концов, это все виджеты! Единственное отличие базового класса в том, что он предоставляет свойства, зависящие от производного класса, для редактирования с использованием пользовательского интерфейса дизайнера — это буквально все. Если вам специально нужно настроить некоторые свойства a QQuickWidget с помощью интерфейса конструктора, то вы можете просто вручную подставить имя внутри .ui файла — это просто XML-файл, который легко редактировать и понимать.

В частности:

 sed -e 's/QWidget/QQuickWidget/g' < mypromoted.ui > myfinal.ui
  

Это все, что нужно, и вы всегда можете проверить результаты в текстовом редакторе.

Комментарии:

1. Мы разрабатываем наши кнопки, метки и т.д. на Qml и пытаемся подключить классы C к нашим файлам QML. Мы не знаем правильного способа сделать это. Когда мы продвигаем QQuickWidgets, мы подключаем классы C к файлам QML и можем изменять их значения и управлять событиями. Мы делаем это неправильно или есть какой-нибудь простой способ сделать это?

2. @Monster Забудьте о том, как вы это делаете сейчас. Если у вас есть более одного QQuickWidget внутри другого окна, вы в значительной степени обречены. Он не был разработан для использования таким образом. У вас должно быть запущено все окно пользовательского интерфейса с использованием QML, и тогда подключение с C относительно простое — в Qt есть целый набор обширных страниц документации об этом. Прочитайте это: doc.qt.io/qt-5/qtqml-cppintegration-overview.html И убедитесь, что вы переходите по ссылкам на различные подстраницы, которые посвящены деталям. В двух словах: вы можете получить доступ к любому объекту QML по имени из кода C , используя контекст движка JS (IIRC).