Qt Gui 第六章布局管理
1、QRadioButton之间如何互斥
其中一种方法是将各个QRadioButton控件放在同一个toolbarsLayout或者toolbarsGroupBox即可;如下所示
toolbarsGroupBox = new QGroupBox(tr("Show toolbars as"));
picturesAndTextRadioButton = new QRadioButton(tr("Pictures and text"));
picturesOnlyRadioButton = new QRadioButton(tr("Pictures only"));
textOnlyRadioButton = new QRadioButton(tr("Text only"));
QVBoxLayout* toolbarsLayout = new QVBoxLayout;
toolbarsLayout->addWidget(picturesAndTextRadioButton);
toolbarsLayout->addWidget(picturesOnlyRadioButton);
toolbarsLayout->addWidget(textOnlyRadioButton);
toolbarsGroupBox->setLayout(toolbarsLayout);
如上图所示:将picturesAndTextRadioButton、picturesOnlyRadioButton和textOnlyRadioButton放在同一个toolbarsLayout里面;即会产生互斥;
总结:控件间的互斥即将QRadioButton放在同一个父窗口,则这些同一个父窗口的控件(layout窗口也算)即产生互斥;
也可以通过构造函数中直接指定父窗口:QRadioButton(const QString &text, QWidget *parent = Q_NULLPTR)、QRadioButton(QWidget *parent = Q_NULLPTR)
信号连接:当radiobutton按钮被点击的时候会触发两个信号,toggled(bool)和clicked();咱们一般是用toggled(bool),因为该信号会传入radiobutton的状态是选中还是不选中。
2、QGridLayout
QVBoxLayout、QHBoxLayout和QGridLayout都直接或间接继承QLayout;
QGridLayout即网格的布局形式;比QVBoxLayout和QHBoxLayout的使用更灵活但是使用过程中也是更复杂;需要指定竖排和横排的顺序;还有占用的位置个数等;
QGridLayout *leftLayout = new QGridLayout;
leftLayout->addWidget(namedLabel, , );
leftLayout->addWidget(namedLineEdit, , );
leftLayout->addWidget(lookInLabel, , );
leftLayout->addWidget(lookInLineEdit, , );
leftLayout->addWidget(subfoldersCheckBox, , , , );
leftLayout->addWidget(tableWidget, , , , );
leftLayout->addWidget(messageLabel, , , , );
QGridLayout的addWidget
inline void addWidget(QWidget *w) { QLayout::addWidget(w); }
void addWidget(QWidget *, int row, int column, Qt::Alignment = Qt::Alignment());
void addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = Qt::Alignment());
void addLayout(QLayout *, int row, int column, Qt::Alignment = Qt::Alignment());
void addLayout(QLayout *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = Qt::Alignment());
如上rowSpan和columnSpan是指要占用的行和竖的位置个数;默认是1;
如row和column是指定在这个QGridLayout布局下,要排在第几行第几列;
3、QStackedLayout
该函数也是继承QLayout;即可以在该页面放置多个窗口。但是该控件的特性是,一次只能显示一个窗口。
a stack of widgets where only one widget is visible at a time。
stackedLayout = new QStackedLayout;
stackedLayout->addWidget(appearancePage);
stackedLayout->addWidget(webBrowserPage);
stackedLayout->addWidget(mailAndNewsPage);
stackedLayout->addWidget(advancedPage);
如上所示,只能显示其中一个页面;其他页面隐藏状态;但是可以通过setCurrentIndex(int)函数来指定当前要显示的是哪个页面;
但是特殊情况下,可以显示所有的页面;通过:stackedLayout->setStackingMode(QStackedLayout::StackAll); 但是除了设置的currentindex外,其他的页面都是disable的状态;
4、QSplitter
用来切割窗口的部件;可横向切割也可纵向切割;将窗口切割成上下n部分:rightSplitter = new QSplitter(Qt::Vertical);
将窗口切成左右n部分mainSplitter = new QSplitter(Qt::Horizontal);
rightSplitter = new QSplitter(Qt::Vertical);
rightSplitter->addWidget(messagesTreeWidget);
rightSplitter->addWidget(textEdit);
rightSplitter->setStretchFactor(, ); mainSplitter = new QSplitter(Qt::Horizontal);
mainSplitter->addWidget(foldersTreeWidget);
mainSplitter->addWidget(rightSplitter);
mainSplitter->setStretchFactor(,);
setCentralWidget(mainSplitter);
关于指定拉伸的,rightSplitter->setStretchFactor(1, 1) 因为rightSplitter 是指定Qt::Vertical 的,所以当水平拉伸的时候,对控件是否设置了拉伸是没有影响的;只影响到竖直的情况。
同理 mainSplitter->setStretchFactor(1,1); 只影响到了水平拉伸;
5、树形结构
QStringList folderLabels;
folderLabels << tr("Folders"); foldersTreeWidget = new QTreeWidget;
foldersTreeWidget->setHeaderLabels(folderLabels);
addFolder(folderIcon, tr("Inbox"));
addFolder(folderIcon, tr("Outbox"));
addFolder(folderIcon, tr("Sent"));
addFolder(trashIcon, tr("Trash")); void MailClient::addFolder(const QIcon &icon, const QString &name)
{
QTreeWidgetItem *root;
if (foldersTreeWidget->topLevelItemCount() == ) {
root = new QTreeWidgetItem(foldersTreeWidget);
root->setText(, tr("Mail"));
foldersTreeWidget->setItemExpanded(root, true);
} else {
root = foldersTreeWidget->topLevelItem();
} QTreeWidgetItem *newItem = new QTreeWidgetItem(root);
newItem->setText(, name);
newItem->setIcon(, icon); if (!foldersTreeWidget->currentItem())
foldersTreeWidget->setCurrentItem(newItem);
}
如上图所示是建图的过程;
先建一个QTreeWidget用来装树形结构的容器
新建root节点的时候,通过构造函数指定root节点的父窗口 root = new QTreeWidgetItem(foldersTreeWidget);
同理在创建各个节点的时候,要指明自己的父节点是哪个 QTreeWidgetItem *newItem = new QTreeWidgetItem(root);
关于newItem->setText(0, name); 其中的0,1,2;这个可以通过如下图直观看出:

因为树节点都是只有一列;所以全都是0;
Qt Gui 第六章布局管理的更多相关文章
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)
在这章中,我们将学习如何创建一个管理图片的新实体,如何使用HTML表单上传图片文件,并使用多对多关系将它们和产品关联起来,如何将图片存储在文件系统中.在这章中,我们还会学习更加复杂的异常处理,如何向模 ...
- [Qt Creator 快速入门] 第4章 布局管理
第3章讲述了一些窗口部件,当时往界面上拖放部件时都是随意放置的,这对于学习部件的使用没有太大的影响,但是,对于一个完善的软件,布局管理却是必不可少的. 无论是想要界面中部件有一个很整齐的排列,还是想要 ...
- 【odoo14】第六章、管理模块数据
本章代码可在原作者github下载 使用外部ID及命名空间 外部ID及XML ID用于标记记录.到目前为止,我们在视图.菜单及动作中接触了XML IDs.本节我们将进一步了解什么是XML ID. 步骤 ...
- Android的学习第六章(布局一TableLayout)
今天我们来简单的说一下Android不居中的TableLayout布局(表格布局) 表格布局的意思就是将我们的布局看做为一个表格,主要用于对控件进行整齐排列 我们看一个简单的案例 <TableL ...
- Android的学习第六章(布局二--RelativeLayout)
今天我们来说一下Android布局中的Relativelayout布局(相对布局) 根据英译过来意思是相对布局,很容易理解,这一样布局使用的是元素与元素之间的微调做到布局的 含义:通过元素与元素之间的 ...
- Android的学习第六章(布局一LinearLayout)
今天我们来说一下Android五大布局-LinearLayout布局(线性布局) 含义:线性布局,顾名思义,指的是整个Android布局中的控件摆放方式是以线性的方式摆放的, 主要作用:主要对整个界面 ...
- 深入浅出ExtJS 第六章 布局
6.1 布局的用途 6.1 布局的用途 //决定把什么东西放到什么位置; var vieport = new Ext.Viewport({ layout:'border', //使用Border ...
- Linux就该这么学 20181004(第六章磁盘管理)
参考链接https://www.linuxprobe.com/ /boot 开机锁需要文件-内核.开机菜单以及所需配置文件 /dev 以文件形式存放的任何设备与接口 /etc 配置文件 /home 用 ...
- Qt Gui 第七章
1.processEvents 该函数用来处理窗口的各种事件,重绘和event ; row < RowCount; ++row) { ; column < ColumnCount; ++c ...
随机推荐
- Element-UI ( Dropdow )下拉菜单组件command传输对象
通过 :command绑定对象数据,handleCommand方法处理数据 template <div v-for="(item, index) in FlyWarningList&q ...
- js 预编译
js 运行代码的时候分为几个步骤:语法分析 ==>预编译 ==>解释执行 语法解析:通篇扫描代码,查看语法是否出错 解释执行:读一行 - 解释一行 - 执行一行 预编译执行的操作: // ...
- Windows server 2012 出现大量无名已断开连接用户清楚办法
打开cmd命令窗口,执行 taskkill /f /im winlogon.exe /t
- 如何利用Azure DevOps快速实现自动化构建、测试、打包及部署
前两天有朋友问我,微软的Azure好用吗,适不适合国人的使用习惯,我就跟他讲了下,Azue很好用,这也是为什么微软云营收一直涨涨涨的原因,基本可以再1个小时内实现自动化构建.打包以及部署到Azure服 ...
- 2020数据字典php-直接复制
[2020数据字典php-直接复制] <?php /** * 生成mysql数据字典 */ header ( "Content-type: text/html; charset=utf ...
- PMP--2.2 效益管理计划
一.文件背景概述 1. 所需文件/数据 制定效益管理计划需要使用商业论证和需求评估中的数据和信息,例如,成本效益分析数据. 成本效益分析数据是在商业论证和需求评估中得到的,在成本效益分析中已经把 ...
- MySQL 8 InnoDB Table 和 Page 压缩
压缩用一点CPU换取磁盘IO.内存空间.磁盘空间. 在有Secondary Indexes 的表中,使用压缩更加明显,相关索引数据也会压缩. InnoDB 表压缩 对表压缩只需要在Create Tab ...
- WebStorm2018破解教程
话不多说,直接上教程: 1,下载压缩包,并解压缩,下载地址如下: 链接:谁点谁知道提取码:9am8 2,双击压缩包中的WebStorm-2018.2.1.exe文件,进行安装. 3,安装完成之后,将压 ...
- 39.Python模板结构优化-引入模板include标签、模板继承使用详解
在进行模板的构造时,不免有些模板的部分样式会相同,如果每一个模板都是重写代码的话,不仅在做的时候麻烦,而且在后期的维护上,也是相当的麻烦.所以我们可以将模板结构进行优化,优化可以通过:引入模板:模板继 ...
- C#开发OPC客户端
第一个随笔,使用了OPEN Live Write,作为客户端.最近使用c#开发一个小软件,主要功能是OPC客户端.以后会开发各类别的协议,作为,协议的转发栈. 因为我本人是搞自动化的,所以搞自动化小伙 ...