Qt 布局(QSplitter 类QDockWidget 类) 总结

2023-10-16 12:01

本文主要是介绍Qt 布局(QSplitter 类QDockWidget 类) 总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、QSplitter 类(窗口分割)

QSplitter类是一个Qt框架提供的基础窗口控件类,用于分割窗口,使得用户可以通过拖动分隔条来调节子窗口的大小。QSplitter在用户界面设计中非常常见,经常用于划分窗口区域,使得程序可以同时显示多个子控件。

QSplitter类的主要特点包括:

  • 可以水平或垂直分割窗口区域
  • 可以通过拖动分隔条来调整子控件的大小
  • 可以在子控件之间添加小部件,如按钮、标签、文本框等

QSplitter类是QWidget的子类,因此它可以嵌套在其他QWidget中以实现更复杂的用户界面设计。开发者可以使用QSplitter类创建多个子控件,并通过分隔条调整这些控件的相对大小,以便在同一个窗口中显示多个控件。

QSplitter类提供了一些方便的方法和信号,例如resize()方法、splitterMoved()信号等,可以让开发者方便地管理和操作QSplitter控件。开发者可以在QSplitter的基础上进行二次开发,以满足自己的需求,或者使用已有的QSplitter控件,以提高开发效率。

案例分析:以实现下图示例

代码示例:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;// w.show();return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"#include <QSplitter>
#include <QTextEdit>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 1:拆分窗口(分割窗口、分裂窗口布局)QSplitter *spMainWindow=new QSplitter(Qt::Horizontal,0);QTextEdit *txteditmain=new QTextEdit("左边主窗口",spMainWindow);// 2:拆分右边部分窗口QSplitter *spRight=new QSplitter(Qt::Vertical,spMainWindow);QTextEdit *txteditup=new QTextEdit("右边上部分窗口",spRight);QTextEdit *txteditdown=new QTextEdit("右边下部分窗口",spRight);// 3:QSplitter *sptest=new QSplitter(Qt::Vertical,spRight);QTextEdit *txtedittest=new QTextEdit("罗小白",sptest);// 4:QSplitter *sptestend=new QSplitter(Qt::Horizontal,spMainWindow);QTextEdit *txtedittestend=new QTextEdit("广东话事人",sptestend);spMainWindow->setWindowTitle("Splitter类拆分窗口测试");spMainWindow->show();}MainWindow::~MainWindow()
{
}

二、QDockWidget 类 (停靠窗口)

QDockWidget 类是 Qt 框架中的一个窗口部件类,可以用于创建具有可停靠属性的子窗口。它可以被放置在 QMainWindow 窗口中,并且可以被用户动态地沿着主窗口的边缘移动,或者可以被固定在主窗口中。 QDockWidget 类还提供了一些其他功能,例如标题栏、关闭按钮、浮动按钮等。

使用 QDockWidget 类创建可停靠的子窗口非常简单,只需要创建一个 QDockWidget 对象并将其添加到 QMainWindow 窗口中即可。下面是一个使用 QDockWidget 类创建可停靠子窗口的示例代码:

QMainWindow* mainWindow = new QMainWindow();
QDockWidget* dockWidget = new QDockWidget("Dock Widget", mainWindow);
dockWidget->setWidget(new QWidget());
mainWindow->addDockWidget(Qt::RightDockWidgetArea, dockWidget);

在这个例子中,我们首先创建了一个 QMainWindow 对象,然后创建了一个 QDockWidget 对象,并设置了其标题为 "Dock Widget"。接着,我们将一个 QWidget 对象设置为 QDockWidget 对象的主窗口部件,并将 QDockWidget 对象添加到 QMainWindow 窗口的右边缘。

最后,需要注意的是,QDockWidget 类还提供了一些其他的方法和信号,例如 setAllowedAreas() 方法和 dockLocationChanged() 信号等,可以用来控制可停靠子窗口的行为和状态。

案例分析:以实现下图示例

代码示例:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();public:void DockWidgetFunc();};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"#include <QTextEdit>
#include <QDockWidget>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{DockWidgetFunc();}MainWindow::~MainWindow()
{
}void MainWindow::DockWidgetFunc()
{setWindowTitle("QDockWidget类停靠窗口测试.");QTextEdit *tedit=new QTextEdit(this); // 定义QTextEdit对象作为主窗口tedit->setText("刘德华 吴彦祖");tedit->setAlignment(Qt::AlignCenter);setCentralWidget(tedit); //将编辑框控件设置为主窗口的中央窗体// 创建停靠窗口1QDockWidget *dw1=new QDockWidget("停靠窗口(一)",this);dw1->setFeatures(QDockWidget::DockWidgetMovable); // 可移动特性dw1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);QTextEdit *qtedit1=new QTextEdit();qtedit1->setText("刘德华(Andy Lau),1961年9月27日出生于香港新界大埔镇泰亨村,华语影视男演员、歌手、制片人、作词人。1981年出演电影处女作《彩云曲》。1983年主演的武侠剧《神雕侠侣》在香港取得62点的收视纪录。1985年发行首张个人专辑《只知道此刻爱你》。1990年凭借专辑《可不可以》在歌坛获得关注;同年主演爱情片《天若有情》。1994年获得十大劲歌金曲最受欢迎男歌星奖。1995年在央视春晚上演 ..");dw1->setWidget(qtedit1);addDockWidget(Qt::RightDockWidgetArea,dw1);// 创建停靠窗口2QDockWidget *dw2=new QDockWidget("停靠窗口(二)",this);dw2->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); // 关闭 浮动QTextEdit *qtedit2=new QTextEdit();qtedit2->setText("吴彦祖(Daniel Wu),1974年9月30日出生于美国旧金山,华语影视男演员、导演、制片人,毕业于美国俄勒冈大学。1998年,因出演个人首部电影作品《美少年之恋》进入演艺圈;同年,凭借文艺片《玻璃之城》提名第18届香港电影金像奖最佳新演员 [1-2]。2001年,主演文艺片《游园惊梦》 [3] 。2003年,首次担任监制并主演了惊悚片《妖夜回廊》,凭该片首次提名第40届台湾电影金马奖最佳男主角 [4] 。2004年,因出演动作片《新警察故事》中关祖一角受到广泛关注,并凭借该角色获得第41届台湾电影金马奖最佳男配角奖 [5] 。2005年,凭借动作片《旺角黑夜》首次提名第24届香港电影金像奖最佳男主角。");dw2->setWidget(qtedit2);addDockWidget(Qt::RightDockWidgetArea,dw2);}

这篇关于Qt 布局(QSplitter 类QDockWidget 类) 总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220158

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern