• 5472阅读
  • 2回复

[原创]在mainwindow中添加的控件显示不出或者堆成了一堆, 布局了也显示不出。 [复制链接]

上一主题 下一主题
离线gota
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-22
虽然对Qwidget,QDialog,QMainWindow还是不甚理解,但是今天解决了个在QMainWindow中添加widget无法显示问题,相信很多小菜也是和我 一样最新熟悉的QDialog,在其中直接new一个label用个布局管理器在setLayout()一些就可以显示了,但是到QMainWindow却吧起作用,因为他没有这个成员函数(在manual中查找setLayout()没有看到QMainLayout).

后来发现,其实是我们初学时没有对各个函数理解透,如果看了QHBoxLayout的manual就会知道他的一个构造函数是
QHBoxLayout(QWidget *parent);
这样自然便会想到在初始话的把mainwindow传给他便可以了,这里传递this指针。结果却发现没有得到正解。
求助google大神,从QT Assistant 中找到这句话:
Note: Creating a main window without a central widget is not supported. You must have a central widget even if it is just a placeholder.
原来mainwindow必须要有个centralWidget.于是便给他一个widget。这时如我们所想,这个widget应该充满mainwindow的中央部分,然后我们在把他传给Layout。
实验之,得正解。代码如下

centralWidget=newQWidget;

label=newQLabel;[
button=newQPushButton;
label->setText(tr("I'm in central widget"));
setCentralWidget(centralWidget);
QHBoxLayout*mainLayout=newQHBoxLayout(this);
mainLayout->addWidget(label);
mainLayout->addWidget(button);






[ 此帖被gota在2011-05-22 18:05重新编辑 ]
离线liuxu_lx7
只看该作者 1楼 发表于: 2011-05-22
如果非要手写代码,下次不如在 UI Designer 里先做出样子。这样,如果有问题,只要查找代码和UI Designer之间的差异,比较容易锁定问题。另:好多时候, UI Designer “编辑样子” “预览样子” “手动写代码样子” 就愣是不一样,尤其用了 Layout     —_ —!!   不管怎么说,至少好些 ^_^
离线gota
只看该作者 2楼 发表于: 2011-05-22
对,对照designer生成的代码学习是个不错的主意。我觉得开始时最好多自己写,等边写边查manual和对照designer生成的代码,把基本的类和其方法搞熟了再用designer加速开发。这样如果出问题可以很快直接代码解决,也可以做些designer做不到的效果。
快速回复
限100 字节
 
上一个 下一个