2010-02-02 68 views
0

关于trolltech的几个例子使用QWidget而不是QMainWindow作为简单Qt应用程序的主窗口。用作窗口时QWidget大小如何?

现在我只需要一个简单的窗口,其中包含一个涵盖整个客户区的单个内容窗口小部件(QGlWidget)。

但是,当我显示一个带有单个内容窗口的QWidget窗口时,它会自动将其自身调整为很小。

如果我创建没有孩子的QWidget父窗口这是一个不错的大默认大小。

我不想诉诸使用布局的一个子窗口:/

回答

3

我的理解是,你使用一个QWidget显示您QGIWidget。尝试直接调用QGIWidget的show方法(如果您的QGIWidget类继承QWidget),Qt将为您创建窗口装饰。

否则,如果你真的需要你的小部件要相互嵌套,并且符合它的大小,你必须使用布局。

+0

我只是有点困惑。我确定有一些简单的例子使用QWidget作为容器并添加一个QButton - 然后QWidget正确调整大小。 正在调用某种大小调整逻辑 - 如果我创建了一个空的QWidget,它会以相当合理的大小创建。就在我创建一个QGlWidget的时候,它创建的真的很小。 现在,不管你的建议如何,只要使用QGlWidget作为我的顶级小部件即可。 – 2010-02-02 09:56:57

2

请遵循gregseth的建议,或者您可以自行调整窗口小部件大小。 (虽然这样你会失去这是由Qt的当您使用的布局提供了很好的自动调整大小)

你的情况,你基本上可以这样做:

QGlWidget* myWidget = new QGlWidget; 
myWidget->resize(QApplication::desktopWidget()->availableGeometry().size()); 

// or maybe instead of resizing show it in fullscreen: 
myWidget->showFullScreen(); 

(其实我不知道记住,如果showFullScreen()会做调整大小适合你,也许你会需要同时调整+ showFullScreen :))

干杯:)

PS使用布局实际上是一种选择。它并不昂贵,而且很灵活。它所得到的:“layout = new QVBoxLayout(myWidget); layout-> addWidget(myWidget);”你完成:)

0

并不总是。

我发现QMainWindow在使用QVBoxLayout和QHBoxLayout来安排子窗口小部件时不会作为父窗口小部件工作。

如果您创建一个QWidget并使用它来代替QMainWindow,那么布局将会正常工作。

QWidget* centralWidget = new QWidget(MainWindow); 
MainWindow->setCentralWidget(centralWidget); 

如果使用QtCreator,看看它的代码创建你可以看到它创建一个“隐藏”的小工具,如果你想直接在顶层使用的布局。

这并不明显,直观,或记录在我找到的任何地方。