Qt通过QSplitter类实现整个窗口内各部分窗口可随意拖拽改变大小

效果图如下:
在这里插入图片描述

设置各个分裂窗口显示比例
ui.splitter_left->setStretchFactor(0, 1);
ui.splitter_left->setStretchFactor(1, 4);
ui.splitter_left->setStretchFactor(2, 1);

拖拉分割线的时候,窗口是否实时显示
ui.splitter_left->setOpaqueResize(false); 
不让子控件被压缩到大小为0
ui.splitter_left->setChildrenCollapsible(false); 
可能分裂窗口内还有一些控件,为了保证其内部控件跟随变动(未布局的情况下),可以通过QSplitter的splitterMoved信号去调用那些控件resize
connect(ui.splitter_left, &QSplitter::splitterMoved, this, [this]() {
	//xx(); 某种需求功能接口
});

更多关于QSplitter类

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是使用C++语言实现的代码,实现了上述功能: ```cpp #include <QtWidgets/QApplication> #include <QtWidgets/QMainWindow> #include <QtWidgets/QTreeView> #include <QtWidgets/QTableView> #include <QtWidgets/QSplitter> #include <QtGui/QStandardItemModel> #include <QtCore/QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow mainWindow; QSplitter *splitter = new QSplitter(Qt::Horizontal); splitter->setHandleWidth(1); splitter->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); splitter->setChildrenCollapsible(false); splitter->setStretchFactor(0, 3); splitter->setStretchFactor(1, 7); QTreeView *treeView = new QTreeView(splitter); treeView->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); QStandardItemModel *treeModel = new QStandardItemModel(); treeModel->setHorizontalHeaderLabels(QStringList() << "Name" << "Size" << "Date Modified"); QStandardItem *rootItem = treeModel->invisibleRootItem(); QStandardItem *item1 = new QStandardItem("Folder 1"); item1->setCheckable(true); item1->setEditable(false); QStandardItem *item2 = new QStandardItem("File 1"); item2->setCheckable(true); item2->setEditable(false); rootItem->appendRow(item1); item1->appendRow(item2); treeView->setModel(treeModel); QTableView *tableView = new QTableView(splitter); tableView->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); mainWindow.setCentralWidget(splitter); mainWindow.setMinimumSize(800, 600); mainWindow.show(); return a.exec(); } ``` 在这段代码中,我们创建了一个 `QMainWindow` 对象 `mainWindow`,然后创建了一个 `QSplitter` 对象 `splitter`,将其设置为主窗口的中央部件。我们将 `splitter` 设置为水平方向的分割器,并将其左右两个部分大小比例设置为 3:7。接着,我们在左侧部分中添加了一个 `QTreeView` 对象 `treeView`,用于显示树形控件,同时我们还创建了一个 `QStandardItemModel` 对象 `treeModel`,用于存储树形控件中的数据。我们将 `treeView` 的模型设置为 `treeModel`,并添加了一些树形控件的数据。在右侧部分中,我们添加了一个 `QTableView` 对象 `tableView`,用于显示表格控件。最后,我们将 `splitter` 设置为主窗口的中央部件,并设置了主窗口的最小大小为 800x600。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离歌漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值