指定QDockWidget和setFloating()的可能错误

时间:2010-04-09 23:27:40

标签: qt qt4

我在使用表格化的QDockWidgets时遇到了一些奇怪的行为,下面是一个带有用于演示行为的注释的示例程序。

这是一个错误还是预期的行为,我在QDockWidget中遗漏了一些导致这种情况的细微差别?

直接,因为这不起作用,如何正确地“取消”隐藏的QDockWidget然后显示它?

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

1 个答案:

答案 0 :(得分:1)

看起来在“setFloating(true)”的情况下,在显示窗口之前它仍然显示但是有“屏幕外”位置,所以你看不到它。尝试将代码更改为smth,如下所示:

dock1.setFloating(true);
qDebug() << "old size: " << dock1.size() << " old pos: " << dock1.pos();
dock1.resize(QSize(200, 200)); // set new size for the dock window
dock1.move(QPoint(50, 50));    // set new position for the dock window
dock1.show();

我相信这应该会显示你的窗口, 问候