• 6617阅读
  • 3回复

[讨论]QSplitter添加一个含有QHBoxLayout的QMainWindow后,显示不出来。 [复制链接]

上一主题 下一主题
离线yueno3
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-15
我是Qt4.7,最近开发遇到一个问题,就是:QSplitter添加一个含有QHBoxLayout的QMainWindow后,显示不出来。

把包含问题的的代码抽出来,整理如下:

#include <QtGui>
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMainWindow *main1=new QMainWindow;

    QMainWindow *main2=new QMainWindow;
    QHBoxLayout *hBoxLayout=new QHBoxLayout;
    hBoxLayout->addWidget(new QLineEdit);
    hBoxLayout->addWidget(new QLineEdit);
    main2->setLayout(hBoxLayout);

    QSplitter *mainSplitter=new QSplitter(Qt::Horizontal);
    mainSplitter->addWidget(main2);
    mainSplitter->addWidget(new QWidget);

    main1->setCentralWidget(mainSplitter);

    main1->show();

    return a.exec();
}

这段代码应该水平显示两个QLineEdit,但是什么都不显示。

但是如果把    QMainWindow *main2=new QMainWindow;
改成: QWidget *main2=new QWidget;

居然就显示了。这两者有什么关系吗?QMainWindow不就是QWidget吗?
因为我要用到QMainWindow的addToolBar接口,所以这里还不能用QWidget代替。

为什么不显示呢?有人知道原因吗???
离线roywillow

只看该作者 1楼 发表于: 2011-10-15
你将一个QMainWindow硬塞到QWidget中真是好奇葩
QMainWindow会自己设定自己的一些flag,保证它始终是作为一个独立的窗口出现的吧

另外代码中只new没指定parent也没delete是不好滴
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线yueno3

只看该作者 2楼 发表于: 2011-10-15
离线dbzhang800

只看该作者 3楼 发表于: 2011-10-15
引用楼主yueno3于2011-10-15 15:47发表的 QSplitter添加一个含有QHBoxLayout的QMainWindow后,显示不出来。 :
这两者有什么关系吗?QMainWindow不就是QWidget吗?
因为我要用到QMainWindow的addToolBar接口,所以这里还不能用QWidget代替。
为什么不显示呢?有人知道原因吗???
.......

你说的没错,QMainWindow就是QWidget。

如果你观察了程序的控制台输出,应该应该知道失败的原因了。

题外:
也可以直接看
http://blog.csdn.net/dbzhang800/article/details/6744650
中的例子四

快速回复
限100 字节
 
上一个 下一个