Я никогда не создавал пользовательский виджет, хранящийся в .dll, поэтому я не могу помочь вам ответить на ваш основной вопрос, но у меня есть обходной путь:
Если ваш пользовательский виджет относительно прост (он не имеет сложных свойств, которые явно требуют редактора форм), вы можете создать заполнитель другого типа (например, суперкласс вашего виджета) в вашей контейнерной форме, чтобы иметь возможность устанавливать основные свойства, такие как положение, геометрия, размер& size-policy, а затем замените этот заполнитель на ваш собственный виджет, используя некоторый простой код в конструкторе формы контейнера.
Допустим, у вас есть следующее:
a.Пользовательский виджет GuiInpImageView, унаследованный от QGraphicsView: GuiInpImageView :: GuiInpImageView (QWidget * parent): QGraphicsView (parent)
b.Mainwindowbase.ui (класс MainWindow), в который вы на самом деле хотите поместить экземпляр GuiInpImageView
Это пошаговое решение:
Поместите.cpp исходный файл и заголовочный файл для GuiInpImageView непосредственно в вашем проекте (не в DLL)
Определите следующий закрытый член в заголовке класса MainWindow: GuiInpImageView * inpImageView;
Откройте mainwindowvase.ui в редакторе форм и поместите виджет QGraphicsView в положение, в котором вы на самом деле хотели разместить свой пользовательский виджет GuiInpImageView.Допустим, вы создали вертикальный макет с именем inpImageViewVertLayout, содержащий QGraphicsView с именем inpImageViewPH (PH = PlaceHolder).Вы также можете установить - если хотите - геометрию, минимальный и максимальный размер и политику размера inpImageViewPH, используя свойства, представленные в редакторе форм QtCreator.
Вставьте следующий код вВаш конструктор MainWindow:
// Main Window Constructor<br>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)<br>
{</p>
<pre><code>setupUi(this); // Setup UI
// Replace inpImageViewPH with custom Widget
// (inpImageViewPH is just a place holder to visualize UI in design mode)
inpImageView = new GuiInpImageView(centralwidget);
inpImageView->setGeometry(inpImageViewPH->geometry());
inpImageView->setMinimumSize(inpImageViewPH->minimumSize());
inpImageView->setMaximumSize(inpImageViewPH->maximumSize());
inpImageView->setSizePolicy(inpImageViewPH->sizePolicy());
inpImageViewVertLayout->addWidget(inpImageView);
// Remove and hide placeholder, keep only the Custom View
inpImageViewVertLayout->removeWidget(inpImageViewPH);
inpImageViewPH->hide();
...
Это самый простой способ, который я нашел, чтобы вставить пользовательский виджет в формуиспользовать код (без создания .DLL), но также иметь графический просмотр и некоторый контроль над положением и размером виджета в контейнере формы.
Надеюсь, это поможет ...