Можно ли редактировать отдельный виджет в QtDesginer?

У меня есть внешняя библиотека, которая включает производный класс от QGLWidget, очень похожий на этот здесь . В этой библиотеке у меня есть класс:

class PictureGLWidget : public QGLWidget { //.. }

Это расширяет родной QGLWidget Qt и персонализирует его. Но это не я написал, я просто получил, через *.dll. Итак, я привязываю этот виджет вручную в своем коде к макету, например:

QGridLayout* layout = new QGridLayout;
layout->addWidget(myPictureGLWidget, 0, 1);
ui->verticalLayout_5->addLayout(layout);

так как я разработал свой MainWindowWidget с интегрированным QtDesigner, который, кстати, очень удобен, я хотел бы обрабатывать мой myPictureGLWidget также в QtDesigner, так как в настоящее время я переделываю MainWindow.

Есть ли способ сделать это? Спасибо заранее!


person Ralf Wickum    schedule 22.07.2015    source источник
comment
наверняка вы использовали конструктор для создания этого виджета, который вы добавляете   -  person AngryDuck    schedule 22.07.2015
comment
@AngryDuck Нет, виджет, который я добавляю, не был написан мной. Я получил его как *.dll.   -  person Ralf Wickum    schedule 22.07.2015
comment
виджет как dll... я предполагаю, что вы имеете в виду, что используете библиотеку, содержащую виджет, экземпляр которого вы получаете в своем коде, а затем добавляете в свой макет... если это так, то я понятия не имею как вы могли бы получить его в дизайнере, я сделал это с моей собственной библиотекой, но это нужно было скомпилировать в VS2012, а затем импортировать как плагин дизайнера qt, я предполагаю, что используемая вами библиотека не будет скомпилирована таким образом, что плагины дизайнера поймут, хотя :/   -  person AngryDuck    schedule 22.07.2015
comment
@Angryduck Точно :( Когда у меня будет исходный код, просто (*.cpp и *.h) без какого-либо QtDesginer *.ui , смогу ли я тогда использовать его в QtDesigner?   -  person Ralf Wickum    schedule 22.07.2015
comment
если весь пользовательский интерфейс просто создан в коде из файла cpp и h, то я, конечно, не знаю, как открыть в дизайнере, мой инстинкт подсказывает, что это невозможно сделать, но не берите за это мою работу, почему бы просто не отредактировать его в коде?   -  person AngryDuck    schedule 22.07.2015


Ответы (2)


Qt Designer поддерживает любой сторонний класс виджетов без необходимости предоставлять для этого подключаемые модули. Вам нужно только согласиться с тем, что свойства и внешний вид виджета не будут доступны в Designer.

  1. Вставьте макет QWidget в макет.

  2. Щелкните правой кнопкой мыши виджет, выберите «Повысить до…».

  3. Добавьте PictureGLWidget в качестве нового класса, продвинутого из QWidget. Укажите соответствующие заголовочные файлы и т. д.

  4. Продвигайте свой виджет до PictureGLWidget.

Когда это будет сделано, код, сгенерированный uic, создаст экземпляр PictureGLWidget там, где он вам нужен, вместо фиктивного QWidget.

Если вы хотите использовать PictureGLWidget в дизайнере вместо фиктивного виджета, вы можете написать плагин дизайнера, который оборачивает виджет и предоставляет его в палитре виджетов, обеспечивает поддержку свойств и т. д.

person Kuba hasn't forgotten Monica    schedule 22.07.2015

Возможно, я неправильно понял ваш вопрос, но не добавляйте ли вы просто QGLWidget в свой дизайн в Designer. Щелкните виджет правой кнопкой мыши и выберите «Повысить до...»?

person mikag    schedule 22.07.2015
comment
Я думаю, он хочет отредактировать содержимое указанного виджета. Продвижение не позволяет - person Zeks; 22.07.2015
comment
Что ж, из примера кода видно, что он хотел получить виджет только в макете, и продвинутый QGLWidget определенно позволил бы это... - person mikag; 22.07.2015
comment
Согласен с тобой микаг. - person Kuba hasn't forgotten Monica; 23.07.2015