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 第六章布局管理的更多相关文章

  1. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)

    在这章中,我们将学习如何创建一个管理图片的新实体,如何使用HTML表单上传图片文件,并使用多对多关系将它们和产品关联起来,如何将图片存储在文件系统中.在这章中,我们还会学习更加复杂的异常处理,如何向模 ...

  2. [Qt Creator 快速入门] 第4章 布局管理

    第3章讲述了一些窗口部件,当时往界面上拖放部件时都是随意放置的,这对于学习部件的使用没有太大的影响,但是,对于一个完善的软件,布局管理却是必不可少的. 无论是想要界面中部件有一个很整齐的排列,还是想要 ...

  3. 【odoo14】第六章、管理模块数据

    本章代码可在原作者github下载 使用外部ID及命名空间 外部ID及XML ID用于标记记录.到目前为止,我们在视图.菜单及动作中接触了XML IDs.本节我们将进一步了解什么是XML ID. 步骤 ...

  4. Android的学习第六章(布局一TableLayout)

    今天我们来简单的说一下Android不居中的TableLayout布局(表格布局) 表格布局的意思就是将我们的布局看做为一个表格,主要用于对控件进行整齐排列 我们看一个简单的案例 <TableL ...

  5. Android的学习第六章(布局二--RelativeLayout)

    今天我们来说一下Android布局中的Relativelayout布局(相对布局) 根据英译过来意思是相对布局,很容易理解,这一样布局使用的是元素与元素之间的微调做到布局的 含义:通过元素与元素之间的 ...

  6. Android的学习第六章(布局一LinearLayout)

    今天我们来说一下Android五大布局-LinearLayout布局(线性布局) 含义:线性布局,顾名思义,指的是整个Android布局中的控件摆放方式是以线性的方式摆放的, 主要作用:主要对整个界面 ...

  7. 深入浅出ExtJS 第六章 布局

       6.1 布局的用途 6.1 布局的用途 //决定把什么东西放到什么位置; var vieport = new Ext.Viewport({ layout:'border', //使用Border ...

  8. Linux就该这么学 20181004(第六章磁盘管理)

    参考链接https://www.linuxprobe.com/ /boot 开机锁需要文件-内核.开机菜单以及所需配置文件 /dev 以文件形式存放的任何设备与接口 /etc 配置文件 /home 用 ...

  9. Qt Gui 第七章

    1.processEvents 该函数用来处理窗口的各种事件,重绘和event ; row < RowCount; ++row) { ; column < ColumnCount; ++c ...

随机推荐

  1. 【MySQL 线上 BUG 分析】之 多表同字段异常:Column ‘xxx’ in field list is ambiguous

    一.生产出错! 今天早上11点左右,我在工作休息之余,撸了一下猫.突然,工作群响了,老大在里面说:APP出错了! 妈啊,这太吓人了,因为只是说了出错,但是没说错误的信息.所以我赶紧到APP上看看. 这 ...

  2. 03(a)多元有约束优化问题(准备知识)

    转成Latex上传太麻烦,直接截图上传了,需要电子版的可以关注一下,微信公众号:“实干小海豹”,回复:”优化01a“,”优化01b“,”优化02a“,”优化02b“,”优化02c“,”优化02c“.. ...

  3. 13-MyBatis03(逆向工程)

    MyBatis逆向工程 1.导入jar包 <dependency> <groupId>org.mybatis</groupId> <artifactId> ...

  4. 微信小程序仿朋友圈功能开发(发布、点赞、评论等功能)

    微信小程序仿朋友圈功能开发(发布.点赞.评论等功能) 1.项目分析 项目整体分为三个部分 发布 展示 详情页 graph LR 朋友圈发布 --内容发布--> 内容展示 内容展示 --点击展示卡 ...

  5. C语言程序转汇编代码

    最近在学着写bootloader,由于汇编太繁杂,希望可以使用C语言完成一部分,然后转成NASM汇编代码,经过摸索,最终找到了一个解决方案,记录于此,留作参考. 核心步骤 使用gcc编译得到.o文件 ...

  6. Java @Deprecated Annotation(注解)

    在本部分的快速指南中,我们将会查看 Java 的 deprecated API 和如何在程序中使用 @Deprecated 注解. @Deprecated Annotation(注解) 作为程序的进化 ...

  7. NIO、多路复用的终极奥义

    1.现在要让有限的系统资源发挥更大的效率,一个最直接的方式就是进行资源复用,比如线程资源复用. 2.线程资源复用的一个最有效的方式就是使用事件驱动模型进行异步调用. 3.Reactor模型就是基于事件 ...

  8. 医院信息集成平台(ESB)实施、建设方案

    医院信息集成平台(ESB)实施.建设方案 基于中立.标准.开放的IT架构和数据标准,打造插拔式医院应用生态. 解决方案 基于ESB集成总线,构建医院信息化建设顶层设计.                 ...

  9. 5.Android-电话拨号器详解

    之前学习了3.Android-ADT之helloworld项目结构介绍后,本章便来写个简单的电话拨号器程序. 实现的步骤如下所示: 1.创建项目 2.写layout/activity_main.xml ...

  10. JS淘宝浏览商品

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...