Seite 1 von 1

[gelöst] QMdiSubWindow zeigt widget nicht an

Verfasst: 7. September 2011 14:03
von metz153
Hallo,

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();
}

Vielen Dank an alle, die sich mein Problem angeschaut haben.
Ich habe meinen Fehler gefunden...
Es liegt an dem

Code: Alles auswählen

resize(2, maximumHeight());
. Genauer gesagt an dem "maximiumHeight()".
Ich benutze jetzt einfach die höhe des parents (mdiArea). dann gehts...