• 8097阅读
  • 8回复

layout()函数问题 [复制链接]

上一主题 下一主题
离线kuguoxin198
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-25
QHBoxLayout* hbox = new QHBoxLayout(this);
QVBoxLayout* vbox1 = new QVBoxLayout();
QVBoxLayout* vbox2 = new QVBoxLayout();
((QHBoxLayout*)layout())->addLayout(vbox1);
((QHBoxLayout*)layout())->addLayout(vbox2);

为什么我这样写运行时刻是错误的呢??

QHBoxLayout* hbox = new QHBoxLayout(this);
QVBoxLayout* vbox1 = new QVBoxLayout();
QVBoxLayout* vbox2 = new QVBoxLayout();
hbox->addLayout(vbox1);
hbox->addLayout(vbox2);
这个是正确的

((QHBoxLayout*)layout())不可以类型转换么??还是函数用的不对
获取一个窗口布局管理器是这个接口么???


我用的是QMainWindow类,好像QmainWindow本身就有个默认Layout,看了setLayout函数说明 说是已经有了Layout需要把以前的给删掉
新设置的setLayout才有效 那么怎么删掉以前的呢 是用delete 吗??
试了下好像也不行
[ 此帖被kuguoxin198在2009-10-25 22:36重新编辑 ]
离线meronasia
只看该作者 1楼 发表于: 2009-10-25
studing
Windows7
Qt 4.52
Notpad + MinGW
离线kuguoxin198
只看该作者 2楼 发表于: 2009-10-25
这么久了还没人来。。。高手高手高高手呢
离线jorneyr

只看该作者 3楼 发表于: 2009-10-25
setLayout(new QVBoxLayout());       // 这里是;QVBox;Layout
QHBoxLayout* hbox = new QHBoxLayout(this);
QVBoxLayout* vbox1 = new QVBoxLayout();
QVBoxLayout* vbox2 = new QVBoxLayout();
((QHBoxLayout*)layout())->addLayout(vbox1); // 这里强制把QVBoxLayout转换成QHBoxLayout, 编译时不会出问题, 但是运行时就有问题了, 因为他们不是同一种类型.
((QHBoxLayout*)layout())->addLayout(vbox2);
离线kuguoxin198
只看该作者 4楼 发表于: 2009-10-25
不好意思
setLayout(new QVBoxLayout()); 这句已经没有了
QHBoxLayout* hbox = new QHBoxLayout(this);
QVBoxLayout* vbox1 = new QVBoxLayout();
QVBoxLayout* vbox2 = new QVBoxLayout();
((QHBoxLayout*)layout())->addLayout(vbox1);
((QHBoxLayout*)layout())->addLayout(vbox2);这样也会出错的。。。。。。。各位可以尝试下。
离线kuguoxin198
只看该作者 5楼 发表于: 2009-10-25
来人来人 。。。。。郁闷了我好一段时间了。。
离线kuguoxin198
只看该作者 6楼 发表于: 2009-10-26
我顶
离线dbzhang800

只看该作者 7楼 发表于: 2009-10-26
你能说一下你要做什么么,要实现什么效果。

一般用QMainWindow的,似乎都只关心CentralWidget或DockWidget的布局吧

为什么要和QMainWindow的layout()过不去呢?如果你真感兴趣,不妨去看看QMainWindow的源代码,layout()指向的大概是 QMainWindowLayout 这个私有类的实例吧
离线蛮蛮
只看该作者 8楼 发表于: 2009-10-27
layout()类型为QLayout *而QHBoxLayout*是继承于QLayout *的。这样当然是不妥的。
蛮蛮工作室
快速回复
限100 字节
 
上一个 下一个