• 10004阅读
  • 14回复

[提问]QSplitter分割成4个窗口,2个水平分割条怎么实现一起移动? [复制链接]

上一主题 下一主题
离线红森林
 
只看楼主 倒序阅读 楼主  发表于: 2013-03-29
    QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);
    QSplitter *splitterLeft=new QSplitter(Qt::Vertical,splitterMain);
    QSplitter *splitterRight=new QSplitter(Qt::Vertical,splitterMain);
    splitterMain->setOpaqueResize(false);//分隔条不实时更新
    splitterLeft->setOpaqueResize(false);
    splitterRight->setOpaqueResize(false);

    QTextEdit *textLeftTop=new QTextEdit(QObject::tr("Left Top Widget"),splitterLeft);
    textLeftTop->setAlignment(Qt::AlignCenter);//设置QTextEdit控件中的文字的对齐方式居中显示
    QTextEdit *textLeftBottom=new QTextEdit(QObject::tr("Left Bottom Widget"),splitterLeft);
    textLeftBottom->setAlignment(Qt::AlignCenter);//设置QTextEdit控件中的文字的对齐方式居中显示
    //开始填充右边的splitter,放上两个text
    QTextEdit *textTop=new QTextEdit(QObject::tr("Right Top Widget"),splitterRight);
    textTop->setAlignment(Qt::AlignCenter);
    QTextEdit *textBottom=new QTextEdit(QObject::tr("Right Bottom Widget"),splitterRight);
    textBottom->setAlignment(Qt::AlignCenter);
    //设置主splitter
    splitterMain->setStretchFactor(1,1);//设置右边的可伸缩
离线红森林
只看该作者 1楼 发表于: 2013-03-29
图片上传不成功,现在分割成4个窗口了。
就是怎么实现左边的水平分割条上下拖动时,右边的水平分割条也一起移动呢?!
离线jdwx

只看该作者 2楼 发表于: 2013-03-29
回 楼主(红森林) 的帖子
这里有一个QuadSplitter。可以分割成4个窗口。
http://www.qtcn.org/bbs/read-htm-tid-52548-fpage-2.html
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线红森林
只看该作者 3楼 发表于: 2013-03-29

离线红森林
只看该作者 4楼 发表于: 2013-03-29
回 2楼(jdwx) 的帖子
qt4.8.1编译报错: 'nullptr' was not declared in this scope
网上搜索了下,也没解决这个错误。
这个能实现水平分割条一起移动吗?
离线jdwx

只看该作者 5楼 发表于: 2013-03-29
回 4楼(红森林) 的帖子
经测试好用。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 6楼 发表于: 2013-03-29
回 4楼(红森林) 的帖子
nullptr好像是c++11里才引入的
那个组件似乎还挺好使的
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线红森林
只看该作者 7楼 发表于: 2013-03-29
报错: 'nullptr' was not declared in this scope已解决:
MinGW gcc版本问题,换成gcc4.6然后
在pro文件中加入 QMAKE_CXXFLAGS+= -std=c++0x
MARK下
离线红森林
只看该作者 8楼 发表于: 2013-03-29
回 5楼(jdwx) 的帖子
菜鸟来袭,虽说编译通过了,这个类真心不会用啊!
看了半天也没看出调用接口在哪啊?
麻烦版主指点指点啊
离线红森林
只看该作者 9楼 发表于: 2013-03-29
回 6楼(roywillow) 的帖子
菜鸟来袭,虽说编译通过了,这个组件真心不会用啊!
看了半天也没看出调用接口在哪啊?
麻烦高手指点指点啊
离线jdwx

只看该作者 10楼 发表于: 2013-03-29
回 8楼(红森林) 的帖子
其实很好用,主要用void addWidget(QWidget *, int row, int column);函数
下面是代码:
.h
private:
    QuadSplitter *m_splitter;

.cpp
构造函数
{
m_splitter = new QuadSplitter(this);
m_splitter->addWidget(ui->textEdit, 0, 0);
m_splitter->addWidget(ui->textEdit_2, 1, 0);
m_splitter->addWidget(ui->textEdit_3, 0, 1);
m_splitter->addWidget(ui->textEdit_4, 1, 1);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(m_splitter);
}
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线红森林
只看该作者 11楼 发表于: 2013-03-29
回 10楼(jdwx) 的帖子
我在ui里面拖了4个textEdit
在MainWindow构造函数加入了上述语句。但分割窗口缩在左上角,只看到2个:
离线jdwx

只看该作者 12楼 发表于: 2013-03-29
回 11楼(红森林) 的帖子
我的窗口是QWidget,上面的代码用到QDialog也可。
QMainWindow不能直接使用布局,需要一个Widget,
.cpp
构造函数
{
m_splitter = new QuadSplitter(this);
m_splitter->addWidget(ui->textEdit, 0, 0);
m_splitter->addWidget(ui->textEdit_2, 1, 0);
m_splitter->addWidget(ui->textEdit_3, 0, 1);
m_splitter->addWidget(ui->textEdit_4, 1, 1);
QWidget *widget = new QWidget(this);
QVBoxLayout *layout = new QVBoxLayout(widget);
layout->addWidget(m_splitter);
setCentralWidget(widget);
}
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线红森林
只看该作者 13楼 发表于: 2013-03-29
感谢版主的耐心回复!
终于在QWidget上看到效果了。
离线红森林
只看该作者 14楼 发表于: 2013-03-30
http://www.qtcn.org/bbs/read-htm-tid-44118.html
参考这个帖子的方法解决了,MARK下
  connect(leftSplitter,SIGNAL(splitterMoved(int,int)),this,SLOT(changeRightSize()));
    connect(rightSplitter,SIGNAL(splitterMoved(int,int)),this,SLOT(changeLeftSize()));
   changeRightSize()中:
   rightSplitter->setSizes(leftSplitter->sizes());
快速回复
限100 字节
 
上一个 下一个