• 6770阅读
  • 4回复

[提问]关于widget窗体间的布局 [复制链接]

上一主题 下一主题
离线wang2222ning
 

只看楼主 倒序阅读 楼主  发表于: 2014-04-14
我的程序主窗口是QMainWindow类, 子窗口有QVideowidget(播放器屏幕) 和QDockwidget(播放列表)和Qwidget(播放状态控制窗口)等,三个子窗口。结果在调试显示的时候,三个窗口重叠在一起,我在主窗口的cpp文件中加入了layout布局控件,结果一样没有效果,所以请假各位,能否有好的解决方法??
程序如下:
{
resize(1000,700);

  //  setWindowOpacity(0.0); //设置窗口不透明

    QPalette p = palette();
    p.setColor(backgroundRole(), QColor(0, 0, 0, 32));
    setPalette(p);
    /*********初始化对象********/
    pscreen = new PlayerScreen(this); //播放器的屏幕
    setCentralWidget(pscreen);  //设置屏幕为正中间

    plistwidget = new PlayListWidget ("PlayList",this); //播放列表
    plistwidget->setAllowedAreas(Qt::RightDockWidgetArea);
    //plistwidget->setMaximumWidth(180);
    //addDockWidget(Qt::RightDockWidgetArea,plistwidget);
    //让列表靠在最右边
    pstatus = new PlayStatus(this); //播放状态控制

    mediaplayer = new QMediaPlayer(0,0); //解析播放媒体
    mediaplayer->setVideoOutput(pscreen);
    /*********初始化对象********/

    /*********为窗口部件************/
    /********方案一********/

    QVBoxLayout *vboxlaout = new QVBoxLayout(this);
    vboxlaout->addWidget(pscreen);
    vboxlaout->addWidget(pstatus);
    setLayout(vboxlaout);

    QHBoxLayout *hboxlaout = new QHBoxLayout(this) ;
    hboxlaout->addLayout(vboxlaout);
    hboxlaout->addWidget(plistwidget);
    setLayout(hboxlaout);

    QVBoxLayout *vboxlaout2 = new QVBoxLayout;
    vboxlaout2->addLayout(hboxlaout);
    vboxlaout2->addWidget(this);
    setLayout(hboxlaout);

    /********方案一********/
     /*******方案二*******/
    /*
     QGridLayout *gridlayout = new QGridLayout(this) ;

     gridlayout->addWidget(pscreen,0,0,2,2);
     gridlayout->addWidget(plistwidget,0,2,3,1);
     gridlayout->addWidget(pstatus,2,0,1,2);  
     this->setLayout(gridlayout);
     */
     /*******方案二*******/

    /*********为窗口部件************/
}

程序运行结果图:

离线realfan

只看该作者 1楼 发表于: 2014-04-14
怎么这么多setLayout
离线wang2222ning

只看该作者 2楼 发表于: 2014-04-15
恩,因为在方案一中,我用了三个Qlayout,用的是水平布局和垂直布局。在方案二中用的是grid布局。两个方案不是同时进行的。
离线dbzhang800

只看该作者 3楼 发表于: 2014-04-15
不要试图给 QMainWindow 添加QLayout!

你应该创建一个中央控件(一个普通的QWidget),在该窗体中添加QLayout,而后将该中央控件加入到QMainWindow
离线wang2222ning

只看该作者 4楼 发表于: 2014-04-15
原来如此,谢谢了。我这就去试试
快速回复
限100 字节
 
上一个 下一个