• 17589阅读
  • 9回复

[提问]往QMainWindow的Central Widget这个位置灵活添加控件 [复制链接]

上一主题 下一主题
离线gameboy70949
 
只看楼主 倒序阅读 楼主  发表于: 2013-05-19
QMainWindow的Central Widget这个位置灵活添加控件。

这是我从API文档里面获得的函数原型:


void QMainWindow::setCentralWidget ( QWidget * widget )




它只能够放置QWidget * widget类型的控件,但是我如果想放其他东西呢,例如:布局(layout)QVBoxLayout。
我发现QMainWindow::setCentralWidget ( myqvboxlayout)之类的是行不通的。
我由于刚刚接触Qt,所以就不太清楚应该怎样做。


我希望做到这样的效果,就是卡在这一步了:

离线kaon

只看该作者 1楼 发表于: 2013-05-19
你扔一个widget进去,再把layout扔到widget里就可以了
离线jdwx

只看该作者 2楼 发表于: 2013-05-19
引用第1楼kaon于2013-05-19 07:31发表的  :
你扔一个widget进去,再把layout扔到widget里就可以了


+1
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线gameboy70949
只看该作者 3楼 发表于: 2013-05-19
回复#1、#2楼,我试试看。
离线gameboy70949
只看该作者 4楼 发表于: 2013-05-19
回 2楼(jdwx) 的帖子
能否具体一点,到底是哪种widget呢?widget被很多控件继承,各不相同,哪个比较符合我的要求的,我现在自己也在慢慢看API文档,如果有人直接指出我会更加快点解决我的问题。
离线roywillow

只看该作者 5楼 发表于: 2013-05-19
回 4楼(gameboy70949) 的帖子
你有一点误解了
layout不是一个可见的东西,它只负责管理组件的大小,所以说就算你放进去了也没有意义

不是指哪种widget,就是QWidget,把它作为一个盒子,里面再放其他你需要的组件
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线gameboy70949
只看该作者 6楼 发表于: 2013-05-19
回 5楼(roywillow) 的帖子
就如一楼图,我希望实现:Core Temp菜单栏下面的那部分那些东西。
1、QMainWindow 的 CentralWidget这个位置当且仅当仅能存放一个 QWidget (我不是百分之一百肯定我说的对)。
2、我又看了看QWidget的说明,我终于明白了,它有一个void QWidget::setLayout ( QLayout * layout )的方法;
3、关于QLayout的理解:
     Qt各种控件,被添加进容器(如QMainWndow)里面一般有两种方法:
              1.例如通过方法 void QMainWindow::setCentralWidget ( QWidget * widget ),能够把一个QLabel("Hello World!")“放进去”。
              2.可以先创建一个QLayout对象,利用void QLayout::addWidget ( QWidget * w )管理其他所需要的组件。然后再利用void QWidget::setLayout()方法,把刚才管理的组件按照布局“浮在”QWidget上,并调整QWidget的空间。然后就可以通过void QMainWindow::setCentralWidget ( QWidget * widget )方法,把QWidget放进QMainWindow里面,也就达到我的目的了。
      另外由于layout不是可见的东西,仅仅负责管理固件的大小和相对位置,所以不存在把layout放进什么东西里面去这种说法
不知道我这样理解对不对呢?
离线roywillow

只看该作者 7楼 发表于: 2013-05-19
回 6楼(gameboy70949) 的帖子
差不多就是那么样的
不过layout跟qwidget的创建没啥先后限制,你可以先创建qwidget,然后创建一个layout,然后把layout加入qwidget中,然后再往layout中添加其他qwidget也没问题
你可以先用设计师设计一个qmainwindow的界面,然后看看它最后生成的c++代码,我最早就是这么发现如何在qmainwindow中添加多个组件的
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线gameboy70949
只看该作者 8楼 发表于: 2013-05-19
回 7楼(roywillow) 的帖子
嗯嗯,我会留意留意的,。。
离线bluesky0318

只看该作者 9楼 发表于: 2015-11-26
我自己创建一个Qwidget怎么也报错呢?mainwindow.obj:-1: error: LNK2001: unresolved external symbol "public: __thiscall CentralWidget::CentralWidget(class QWidget *)" (??0CentralWidget@@QAE@PAVQWidget@@@Z)
快速回复
限100 字节
 
上一个 下一个