• 4916阅读
  • 4回复

Qt新手提问有关QGridLayout问题 [复制链接]

上一主题 下一主题
离线lhtlovestar
 
只看楼主 倒序阅读 楼主  发表于: 2013-10-25
我是一个刚刚接触Qt的新手,在学习QGridLayout是运行完总是和书上的运行结果不一样,请哪位大神帮忙解决一下。
代码如下:
#include "dialog.h"
#include <QGridLayout>Dialog::Dialog(QWidget *parent)
    : QMainWindow(parent)
{    
    label1=new QLabel(this);
    label1->setText(tr("请输入圆的半径:"));
    lineEdit= new QLineEdit(this);
    label2=new QLabel(this);
    button=new QPushButton(this);
    button->setText(tr("显示圆的面积"));
    QGridLayout *mainLayout=new QGridLayout(this);
    mainLayout->addWidget(label1,0,0);
    mainLayout->addWidget(lineEdit,0,1);
    mainLayout->addWidget(label2,1,0);
    mainLayout->addWidget(button,1,1);}
Dialog::~Dialog()
{    
}
运行结果如下:


我想问一下是哪里的问题啊,多谢了!
源码
附件: test4.rar (4 K) 下载次数:0
稳扎稳打
离线dbzhang800

只看该作者 1楼 发表于: 2013-10-25
把你的QMainWindow换成 QDialog或QWidget或其他没有内置Layout的Widget即可。
离线lhtlovestar
只看该作者 2楼 发表于: 2013-10-25
回 1楼(dbzhang800) 的帖子
非常感谢,已经解决了。但我想问一下,这个的原理是什么啊,为什么QMainWindow内置Layout的Widget就无法编译成功呢?
稳扎稳打
离线lhtlovestar
只看该作者 3楼 发表于: 2013-10-25
回 1楼(dbzhang800) 的帖子
如果要在QMainWindow中使用Layout,那有该怎么改代码呢?
稳扎稳打
离线dbzhang800

只看该作者 4楼 发表于: 2013-10-28
多看看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或例子就可以了。
快速回复
限100 字节
 
上一个 下一个