多看看Manual,多用,这些东西你自然就了解了。
比如QWidget::setLayout()的Manual中如是说:
If there already is a layout manager installed on this widget, QWidget won't let you install another. You must first delete the existing layout manager (returned by layout()) before you can call setLayout() with the new layout.
你使用QMainWindow失败的原因是因为它默认安装了QLayout.
为什么它默认安装QLayout,因为它需要布局 菜单栏、工具栏、停靠窗口、状态栏 等等一堆的东西。
至于如何改代码,你看Manual或例子就可以了。