2 Attachment(s)
Qt Designer - expose child widget in Custom Container Widget Plugin
I have a custom widget I've made. It consists of a custom QPushButton and a QFrame in a vertical layout. Within the QFrame is a QWidget used as a container. Click the button to toggle the visibility of the widget inside the frame and the frame will resize. This creates a nice expanding widget. I can use this widget without problems programmatically, but I want to design in a WYSIWYG manner, so I need to create a QtDesigner plugin.
I've created a small test widget, MyWidget, that mimics the above. It has a button and a widget in a vertical layout. The plugin, mywidgetplugin returns true for isContainer(). I can see and place MyWidget inside Qt Designer and place widgets onto MyWidget. While this is cool, it's not the exact functionality I need. I need to be able to place widgets onto the container widget inside MyWidget (see attached image).
Attachment 6598
Does anybody know how to expose a child widget of a custom widget via a plugin so Qt Designer can see it as a viable container?
I was hacking around and I tried this...it almost works until it crashes Designer when I click and drag the mouse over the container widget. (probably because I'm doing something stupid, but I don't know enough programming to avoid it). It also doesn't save properly because when I reopen the ui file the original container widget (with all the new checkboxes/radio buttons/etc inside) is now just a free floating child of MyWidget, and MyWidget has its own clean container widget. This probably has something to do with *child pointer and how MyWidget gets recreated when I reload the ui file, but I don't know enough to troubleshoot this.
My Widget:
Code:
MyWidget
::MyWidget(QWidget *parent
) :{
button->setObjectName("__qt__passive_button");
containerWidget->setObjectName("container");
layout->addWidget(button);
layout->addWidget(containerWidget);
}
Here's the hack to the plugin:
Code:
{
if (m_initialized)
return;
// Add extension registrations, etc. here
manager = formEditor->formWindowManager();
qDebug() << manager;
m_initialized = true;
}
bool MyWidgetPlugin::isInitialized() const
{
return m_initialized;
}
{
QWidget *myWidget
= new MyWidget
(parent
);
if (manager)
formWindow = manager->formWindow(0);
QWidget *child
= myWidget
->layout
()->itemAt
(1)->widget
();
if (formWindow)
formWindow->manageWidget(child);
return myWidget;
}
Here is an image comparing before and after the hack. I'd like to be able to do what is in the right image legitimately if Qt Designer allows. I found this old post that seems to imply it might not be possible:
http://www.qtcentre.org/threads/1697...ight=container
Any help would be much appreciated. I would much rather setup my little widgets in a WYSIWYG fashion than by programming.
Kevin
Re: Qt Designer - expose child widget in Custom Container Widget Plugin
I found a solution using the multipagewidgetplugin for MyWidget, but treating it as only a 1 page widget. I tested it in PyQt at work. I'll post a longer response with code when I get home tonight. I had tried this approach before, but I didn't fully understand what was happening...now I think I do.
-Kevin