ich habe folgendes Problem:
Ich habe eine mdiArea, die am linken Rand 1 bis 5 widgets (TableWidget, ListWidget ...) untereinander anzeigen sollen.
Diese Widgets sollen mit einem HoverEnterEvent und einem HoverLeaveEvent auf und zu gehen.
Hierzu habe ich einfach die entsprechenden Widgets in ein SubWindow (HoverLeftWidgets - das ich von QMdiSubWindow abgeleitet habe), mittels einem QVBoxLayout reingemacht, und das ganze angezeigt.
Dazu dachte ich mir, setze ich als Parent einfach die mdiArea ein und somit wird es am linken mdiArea-rand gezeichnet.
Aber leider wird dann der Inhalt des "HoverLeftWidgets" (also die widgets: TableWidget, ListWidget ...) nicht angezeigt.
Wenn ich das parent nicht setze, bekomme ich ein ganz normales mdiSubWindow, indem man die widgets auch sieht.
Und genau das verstehe ich nicht ganz. Ohne Parent funktioniert es wie erwartet und mit gesetzten´m parent eben nicht!
Hier mal mein Code:
Code: Alles auswählen
HoverLeftWidgets::HoverLeftWidgets(QList<QWidget *> widgets, QMdiArea* parent)
: QMdiSubWindow(parent)
{
m_widgetList = widgets;
mp_listLayout = new QVBoxLayout;
mp_widgetsWidget = new QWidget;
m_maxSize = QSize();
for(int i = 0; i < m_widgetList.count(); i++)
{
m_widgetList.at(i)->setMinimumWidth(0);
m_widgetList.at(i)->resize(QSize(m_widgetList.at(i)->maximumSize()));
m_widgetList.at(i)->show();
m_widgetList.at(i)->repaint();
mp_listLayout->addWidget(m_widgetList.at(i));
if(m_widgetList.at(i)->height() > m_maxSize.height())
{
m_maxSize.setHeight(m_widgetList.at(i)->height());
}
if(m_widgetList.at(i)->width() > m_maxSize.width())
{
m_maxSize.setWidth(m_widgetList.at(i)->width());
}
qDebug() <<m_widgetList.at(i);
}
mp_widgetsWidget->setMinimumWidth(0);
mp_widgetsWidget->setLayout(mp_listLayout);
mp_widgetsWidget->resize(m_maxSize.width(), maximumHeight());
mp_widgetsWidget->show();
mp_widgetsWidget->repaint();
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
layout()->addWidget(mp_widgetsWidget);
resize(2, maximumHeight());
repaint();
}
HoverLeftWidgets::~HoverLeftDockWidgets()
{
}
void HoverLeftWidgets::enterEvent(QEvent *event)
{
resize(300, maximumHeight());
repaint();
}
void HoverLeftWidgets::leaveEvent(QEvent *event)
{
resize(2, maximumHeight());
repaint();
}
Ich habe meinen Fehler gefunden...
Es liegt an dem
Code: Alles auswählen
resize(2, maximumHeight());Ich benutze jetzt einfach die höhe des parents (mdiArea). dann gehts...