网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月11日漏签0天
qt吧 关注:49,685贴子:158,988
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 8回复贴,共1页
<<返回qt吧
>0< 加载中...

请教一个关于QSplitter的问题

  • 取消只看楼主
  • 收藏

  • 回复
  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我想得到这样一个结果:

结果运行出来是这样一个结果:

代码是:

请问下是为什么?


  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码如下:
this->mainSplitter = new QSplitter( this );
this->mainSplitter->setOrientation(Qt::Horizontal);
this->setCentralWidget(this->mainSplitter);
//------------------------------------------
QFrame* frame1 = new QFrame(this);
frame1->setFrameStyle(QFrame::Box);
this->mainSplitter->addWidget(frame1);
//------------------------------------------
QSplitter* splitter1 = new QSplitter(this);
splitter1->setOrientation(Qt::Vertical);
QFrame* frame2 = new QFrame(this);
frame2->setFrameStyle(QFrame::Box);
QFrame* frame3 = new QFrame(this);
frame3->setFrameStyle(QFrame::Box);
splitter1->addWidget(frame2);
splitter1->addWidget(frame3);
//------------------------------------------
this->mainSplitter->addWidget(splitter1);


2025-05-11 04:21:18
广告
  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
使用setStretchFactor不起作用


  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

不起作用


  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
四楼的意见,只保留this->mainSplitter->setStretchFactor(1,1);这一句,结果如下:

想问下怎么得到左右两边各占一半的效果


  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
当我动态添加窗口时,
初始状态:

第一次水平添加:

第二次垂直添加:


  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码如下:
//--------------------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
int num = 0;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),currentFrame(NULL)
{
ui->setupUi(this);
this->mainSplitter = new QSplitter(this);
this->mainSplitter->setAttribute(Qt::WA_Resized);
this->mainSplitter->setOrientation(Qt::Horizontal);
this->setCentralWidget(this->mainSplitter);
QFrame* frame = this->CreateFrame();
this->currentFrame = frame;
this->mainSplitter->addWidget(frame);
connect(ui->actionHorizontal,SIGNAL(triggered(bool)),this,SLOT(AddSplitterHorizontal()));
connect(ui->actionVertical,SIGNAL(triggered(bool)),this,SLOT(AddSplitterVertical()));
}
//----------------------------------------------------------------
MainWindow::~MainWindow()
{
delete ui;
}
//----------------------------------------------------------------
// 水平添加
void MainWindow::AddSplitterHorizontal()
{
QFrame* frame = this->CreateFrame();
QSplitter* splitter = new QSplitter(this);
splitter->setOrientation(Qt::Horizontal);
splitter->setAttribute(Qt::WA_Resized);
QSplitter* parentSplitter = qobject_cast<QSplitter*>(this->currentFrame->parentWidget());
int index = parentSplitter->indexOf(this->currentFrame);
splitter->addWidget(this->currentFrame);
splitter->addWidget(frame);
parentSplitter->insertWidget(index,splitter);
this->currentFrame = frame;
}
//----------------------------------------------------------------
// 垂直添加
void MainWindow::AddSplitterVertical()
{
QFrame* frame = this->CreateFrame();
QSplitter* splitter = new QSplitter(this);
splitter->setOrientation(Qt::Vertical);
splitter->setAttribute(Qt::WA_Resized);
QSplitter* parentSplitter = qobject_cast<QSplitter*>(this->currentFrame->parentWidget());
int index = parentSplitter->indexOf(this->currentFrame);
splitter->addWidget(this->currentFrame);
splitter->addWidget(frame);
parentSplitter->insertWidget(index,splitter);
this->currentFrame = frame;
}
//----------------------------------------------------------------
QFrame* MainWindow::CreateFrame()
{
QFrame* frame = new QFrame(this);
frame->setFrameStyle(QFrame::Box);
frame->setObjectName(QStringLiteral("frame%1").arg(num));
QVBoxLayout* layout = new QVBoxLayout(frame);
QLabel* lab = new QLabel(frame);
//lab->setAlignment(Qt::AlignCenter);
lab->setText(QStringLiteral("frame%1").arg(num));
//layout->addWidget(lab,Qt::AlignCenter);
layout->addWidget(lab);
num++;
return frame;
}//----------------------------------------------------------------


2025-05-11 04:15:18
广告
  • 不够洒脱的旅人
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
已解决,每次在分割窗口中添加/删除widget后,用 void QSplitter::setSizes(const QList<int> &list)来设置各个子部件的比例


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 8回复贴,共1页
<<返回qt吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示