Qt窗口分割

本文介绍了在Qt开发中如何实现窗口分割功能。针对特定显示区域,允许任意分割QWidget以容纳自定义控件。通过设置QWidget的属性来区分可分割和不可分割窗口,使用QSplitter类进行窗口分割。同时,利用setStretchFactor调整分割比例,支持水平、垂直及四宫格等分割方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发需求:在对应的显示区域,任意分割QWidget,作为自定义控件的容器。

思路:限制信息显示区域才能作为分割窗口,区分不可窗口和可分割窗口;获取光标处的QWidget作为被分割窗口。调用窗口分割类QSplitter分割窗口。

头文件 #include <QSplitter>

Qt的属性系统可以设置QWidget的属性,setProperty()接口设置可分割窗口的属性,FLAG_ATT字符串作为窗口的分割属性,widget->setProperty("FLAG_ATT",1)//1不可分割,0为可分割。

void MeasureDisplay::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton && ui->widget_center->geometry().contains(this->mapFromGlobal(QCursor::pos())))
    {
        int mouse_x = QCursor::pos().x();//鼠标点击处横坐标
        int mouse_y = QCursor::pos().y();//鼠标点击处纵坐标
        cur_widget_ = QApplication::widgetAt(mouse_x, mouse_y);//获取鼠标点击处的控件
        auto widget_flag = cur_widget_->property("FLAG_ATT").toInt();//窗口属性,1不可分割,0为可分割
        if(widget_flag == 1)
        {
            cur_widget_ = nullptr;
            return;
        }
### 如何在 Qt 中实现右侧窗口分割Qt 中,可以通过 `QSplitter` 和布局管理器来实现窗口分割功能。为了实现右侧窗口的特定分割效果,通常会结合水平布局 (`QHBoxLayout`) 或垂直布局 (`QVBoxLayout`) 来完成设计。 以下是具体的代码示例: ```cpp #include <QApplication> #include <QWidget> #include <QSplitter> #include <QVBoxLayout> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; QVBoxLayout layout(&window); // 创建主窗口的垂直布局 QPushButton buttonLeft("左侧按钮"); QSplitter splitter(Qt::Horizontal); // 使用水平方向的分隔条 QWidget leftWidget; // 左侧小部件 leftWidget.setStyleSheet("background-color: lightblue;"); leftWidget.setFixedSize(200, 400); QWidget rightWidget; // 右侧小部件 rightWidget.setStyleSheet("background-color: lightgreen;"); rightWidget.setFixedSize(400, 400); splitter.addWidget(&leftWidget); splitter.addWidget(&rightWidget); layout.addWidget(&buttonLeft); layout.addWidget(&splitter); window.resize(800, 600); window.show(); return app.exec(); } ``` #### 解析 上述代码通过 `QSplitter` 实现了一个简单的右侧窗口分割[^1]。 - 主窗口采用垂直布局 (`QVBoxLayout`) 将顶部的一个按钮和下方的分割区域分开。 - 分割部分由 `QSplitter` 控制,其方向设置为水平 (`Qt::Horizontal`),从而实现了左右两侧的小部件分离。 - 用户可以在运行时拖动中间的分隔条调整两个子窗口的比例。 此外,在实际应用中可以根据需求进一步定制样式表 (如颜色、大小等),并动态修改分隔比例[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值