Possible bug with tabified QDockWidget and setFloating()
        Posted  
        
            by krunk
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by krunk
        
        
        
        Published on 2010-04-09T23:27:40Z
        Indexed on 
            2010/04/09
            23:33 UTC
        
        
        Read the original article
        Hit count: 353
        
qt4
I've run into some odd behavior with tabified QDockWidgets, below is an example program with comments that demonstrates the behavior.
Is this a bug or is it expected behavior and I'm missing some nuance in QDockWidget that causes this?
Directly, since this does not work, how would one properly "undock" a hidden QDockWidget then display it?
#include <QApplication>
#include <QMainWindow>
#include <QAction>
#include <QDockWidget>
#include <QMenu>
#include <QSize>
#include <QMenuBar>
using namespace std;
int main (int argc, char* argv[])
{
  QApplication app(argc, argv);
  QMainWindow window;
  QDockWidget dock1(&window);
  QDockWidget dock2(&window);
  QMenu menu("View");
  dock1.setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
  dock2.setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
  dock1.setWindowTitle("Dock One");
  dock2.setWindowTitle("Dock Two");
  window.addDockWidget(Qt::RightDockWidgetArea, &dock1);
  window.addDockWidget(Qt::RightDockWidgetArea, &dock2);
  window.menuBar()->addMenu(&menu);
  window.setMinimumSize(QSize(800, 600));
  window.tabifyDockWidget(&dock1, &dock2);
  dock1.hide();
  dock2.hide();
  menu.addAction(dock1.toggleViewAction());
  menu.addAction(dock2.toggleViewAction());
  window.show();
  // Below is where the oddness starts. It seems to only exhibit the 
  // behavior if the dock widgets are tabified.
  // Odd behavior here
  // This does not work. the window never shows, though its menu action shows
  // checked. Not only does this window not show up, but all toggle actions
  // for all dock windows (e.g. dock1 and dock2) are broken for the duration
  // of the application loop.
  // dock1.setFloating(true);
  // dock1.show();
  // This does work. . . of course only if you do _not_ run the above first.
  // however, you can often get a little lag or "blip" in the rendering as
  // the dock is shown docked before setFloating is set to true.
  dock1.show();
  dock1.setFloating(true);
  return app.exec();
}
© Stack Overflow or respective owner