Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget

一、QGroupBox分组框QGroupBox为构建分组框提供了支持。分组框通常带有一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。分组框的标题通常在上方显示,其位置可以设置为

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

QT中有九种容器组件,分别是组合框QGroupBox、滚动区QScrollArea、工具箱QToolBox、选项卡QTabWidget、控件栈QWidgetStack、框架QFrame、组件QWidget、MDI窗口显示区QMdiArea、停靠窗口QDockWidget。

本博主要介绍:组合框QGroupBox、滚动区QScrollArea、工具箱QToolBox、选项卡QTabWidget

一、QGroupBox分组框

  QGroupBox为构建分组框提供了支持。分组框通常带有一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。分组框的标题通常在上方显示,其位置可以设置为靠左、居中、靠右、自动调整这几种方式之一。位于分组框之中的窗口部件可以获得应用程序的焦点,位于分组框之内的窗口部件是分组框的子窗口,通常使用addWidget()方法把子窗口部件加入到分组框之中。

  Qt示例:\Examples\Qt-5.9.3\widgets\widgets\groupbox中提供了QGroupBox的示例

  Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget

(1)属性

Q_PROPERTY(QString title READ title WRITE setTitle)
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true)

(2)信号、槽

public Q_SLOTS:
    void setChecked(bool checked);

Q_SIGNALS:
    void clicked(bool checked = false);
    void toggled(bool);

(3)示例

#include "mainwindow.h"
#include <QApplication>

#include <QObject>
#include <QGroupBox>
#include <QPushButton>
#include <QCheckBox>
#include <QRadioButton>
#include <QVBoxLayout>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGroupBox *pGroupBox = new QGroupBox(QObject::tr("GroupBox test"));
    QPushButton *pBtn = new QPushButton(QObject::tr("button")) ;
    QCheckBox* pCheckBox = new QCheckBox(QObject::tr("checkbox test"));
    QRadioButton* pRadio = new QRadioButton(QObject::tr("radiobtn test"));
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(pBtn);
    layout->addWidget(pCheckBox);
    layout->addWidget(pRadio);
    pGroupBox->setLayout(layout);

    pGroupBox->setCheckable(true);
    pGroupBox->show();
    return a.exec();
}

Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidgetQt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget

二、QScrollArea滚动区

  QScrollArea滚动区组件用来显示子控件的内容的框架,如果子控件的尺寸超过了框架的大小,可以使用滚动条,方便查看整个子控件。QScrollArea 可以给任何QWidget添加滚动条,但一般自定义窗体添加滚动条不显示。 

  class QScrollArea : public QAbstractScrollArea

  class QAbstractScrollArea : public QFrame

(1)属性

class Q_WIDGETS_EXPORT QAbstractScrollArea : public QFrame
{
    Q_OBJECT

    Q_PROPERTY(Qt::ScrollBarPolicy verticalScrollBarPolicy READ verticalScrollBarPolicy WRITE setVerticalScrollBarPolicy)
    Q_PROPERTY(Qt::ScrollBarPolicy horizontalScrollBarPolicy READ horizontalScrollBarPolicy WRITE setHorizontalScrollBarPolicy)
    Q_PROPERTY(SizeAdjustPolicy sizeAdjustPolicy READ sizeAdjustPolicy WRITE setSizeAdjustPolicy)
  .......................................................    
}

class Q_WIDGETS_EXPORT QScrollArea : public QAbstractScrollArea
{
    Q_OBJECT
    Q_PROPERTY(bool widgetResizable READ widgetResizable WRITE setWidgetResizable)
    Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
    ................................................
}

(2)常用成员函数 

  QScrollArea::QScrollArea(QWidget *parent = 0)

  构造一个父对象为parent的ScrollArea

  void QScrollArea::setWidget(QWidget *widget)

  设置控件widget为QScrollArea组件的子控件

  QWidget *SCrollArea::takeWidget()

  删除QScrollArea的子控件

   QWidget *QScrollArea::widget()const

  返回QScrollArea的子控件

(3)示例

#include "mainwindow.h"
#include <QApplication>

#include <QObject>
#include <QGroupBox>
#include <QPushButton>
#include <QCheckBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QScrollArea>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QGroupBox *pGroupBox = new QGroupBox(QObject::tr("GroupBox test"), &w);
    QPushButton *pBtn = new QPushButton(QObject::tr("button")) ;
    QCheckBox* pCheckBox = new QCheckBox(QObject::tr("checkbox test"));
    QRadioButton* pRadio = new QRadioButton(QObject::tr("radiobtn test"));

    QScrollArea* pSCrollArea = new QScrollArea(&w);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(pBtn);
    layout->addWidget(pCheckBox);
    layout->addWidget(pRadio);
    pGroupBox->setLayout(layout);

    pGroupBox->setCheckable(true);  // 将groupbox添加到滚动区
    pSCrollArea->setWidgetResizable(true);  // 设置滚动区大小
    pSCrollArea->setBackgroundRole(QPalette::Dark);
    pSCrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    pSCrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    pSCrollArea->setWidget(pGroupBox);

    w.setCentralWidget(pSCrollArea);
    w.setWindowTitle("container test");
    w.setMinimumSize(50,50);
    w.show();
    return a.exec();
}

Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidgetQt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget

三、QToolBox工具箱

  QToolBox提供了一系列的页和隔间,就像Qt Creator中的工具箱一样。

(1)属性

class Q_WIDGETS_EXPORT QToolBox : public QFrame
{
    Q_OBJECT
    Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentChanged)
    Q_PROPERTY(int count READ count)
    。。。。。。。。。。。。。。。。。。。。
}

(2)常用函数

  添加项,设置项的图标、文本、enable、tooltip等

  int addItem(QWidget *widget, const QString &text);
    int addItem(QWidget *widget, const QIcon &icon, const QString &text);
    int insertItem(int index, QWidget *widget, const QString &text);
    int insertItem(int index, QWidget *widget, const QIcon &icon, const QString &text);

    void removeItem(int index);

    void setItemEnabled(int index, bool enabled);
    bool isItemEnabled(int index) const;

    void setItemText(int index, const QString &text);
    QString itemText(int index) const;

    void setItemIcon(int index, const QIcon &icon);
    QIcon itemIcon(int index) const;

#ifndef QT_NO_TOOLTIP
    void setItemToolTip(int index, const QString &toolTip);
    QString itemToolTip(int index) const;
#endif

    int currentIndex() const;
    QWidget *currentWidget() const;
    QWidget *widget(int index) const;
    int indexOf(QWidget *widget) const;
    int count() const;

public Q_SLOTS:
    void setCurrentIndex(int index);
    void setCurrentWidget(QWidget *widget);

Q_SIGNALS:
    void currentChanged(int index);

(3)示例

  思想:QToolBox中的每一项为QWidget

     QWidegt的组成:QVBoxLayout,每个QVBoxLayout中包含两个QToolButton

Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget
Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget

#include "mainwindow.h"
#include <QApplication>
#include <QToolBox>
#include <QVBoxLayout>
#include <QToolButton>
#include <QGroupBox>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QWidget *pGroup1 = new QWidget;

    QToolButton *pBtn1 = new QToolButton;
    pBtn1->setText("apple");
    pBtn1->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    pBtn1->setAutoRaise(true);
    pBtn1->setArrowType(Qt::ArrowType::DownArrow);

    QToolButton *pBtn2 = new QToolButton;
    pBtn2->setText("babala");
    pBtn2->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    pBtn2->setAutoRaise(true);

    QVBoxLayout *pLayout1 = new QVBoxLayout(pGroup1);
    pLayout1->setMargin(10);
    pLayout1->setAlignment(Qt::AlignmentFlag::AlignLeft);
    pLayout1->addWidget(pBtn1);
    pLayout1->addWidget(pBtn2);

    //////////////////////////////////////
    QWidget *pGroup2 = new QWidget;
    QToolButton *pBtn3 = new QToolButton;
    pBtn3->setText("HUAWEI");
    pBtn3->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    pBtn3->setAutoRaise(true);

    QToolButton *pBtn4 = new QToolButton;
    pBtn4->setText("IXOAMI");
    pBtn4->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    pBtn4->setAutoRaise(true);

    QVBoxLayout *pLayout2 = new QVBoxLayout(pGroup2);
    pLayout2->setMargin(10);
    pLayout2->setAlignment(Qt::AlignmentFlag::AlignLeft);
    pLayout2->addWidget(pBtn3);
    pLayout2->addWidget(pBtn4);

    QToolBox* pToolBox = new QToolBox(&w);
    pToolBox->addItem(pGroup1, "fruit");   // 当第一个参数为QToolBtn时显示不对
    pToolBox->addItem(pGroup2, "telephone");

    w.setCentralWidget(pToolBox);
    w.setWindowTitle("container test");
    w.setMinimumSize(50,50);
    w.show();
    return a.exec();
}

View Code

Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidgetQt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget

四、QTabWidget选项卡

  QTabWidget选项卡组件顶部或底部有一个标签选项栏,每个标签选项都有一个页面,选择哪个页面,只需单击对应的标签即可,或按指定ALT+字母快捷键组合即可。

(1)属性

  TabPosition、TabShape、currentIndex、count、iconSize、TextElideMode、usesScrollButtons、documentMode、tabsClosable、movable、tabBarAutoHide

class Q_WIDGETS_EXPORT QTabWidget : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(TabPosition tabPosition READ tabPosition WRITE setTabPosition)
    Q_PROPERTY(TabShape tabShape READ tabShape WRITE setTabShape)
    Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentChanged)
    Q_PROPERTY(int count READ count)
    Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
    Q_PROPERTY(Qt::TextElideMode elideMode READ elideMode WRITE setElideMode)
    Q_PROPERTY(bool usesScrollButtons READ usesScrollButtons WRITE setUsesScrollButtons)
    Q_PROPERTY(bool documentMode READ documentMode WRITE setDocumentMode)
    Q_PROPERTY(bool tabsClosable READ tabsClosable WRITE setTabsClosable)
    Q_PROPERTY(bool movable READ isMovable WRITE setMovable)
    Q_PROPERTY(bool tabBarAutoHide READ tabBarAutoHide WRITE setTabBarAutoHide)
}

(2)信号、槽

public Q_SLOTS:
    void setCurrentIndex(int index);
    void setCurrentWidget(QWidget *widget);

Q_SIGNALS:
    void currentChanged(int index);
    void tabCloseRequested(int index);
    void tabBarClicked(int index);
    void tabBarDoubleClicked(int index);

(3)示例

#include "mainwindow.h"
#include <QApplication>
#include <QTabWidget>
#include <QToolButton>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QWidget *pGroup1 = new QWidget;

    QToolButton *pBtn1 = new QToolButton;
    pBtn1->setText("apple");
    pBtn1->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    pBtn1->setAutoRaise(true);
    pBtn1->setArrowType(Qt::ArrowType::DownArrow);

    QToolButton *pBtn2 = new QToolButton;
    pBtn2->setText("babala");
    pBtn2->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    pBtn2->setAutoRaise(true);

    QVBoxLayout *pLayout1 = new QVBoxLayout(pGroup1);
    pLayout1->setMargin(10);
    pLayout1->setAlignment(Qt::AlignmentFlag::AlignLeft);
    pLayout1->addWidget(pBtn1);
    pLayout1->addWidget(pBtn2);

    //////////////////////////////////////
    QWidget *pGroup2 = new QWidget;
    QToolButton *pBtn3 = new QToolButton;
    pBtn3->setText("HUAWEI");
    pBtn3->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    pBtn3->setAutoRaise(true);

    QToolButton *pBtn4 = new QToolButton;
    pBtn4->setText("IXOAMI");
    pBtn4->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    pBtn4->setAutoRaise(true);

    QVBoxLayout *pLayout2 = new QVBoxLayout(pGroup2);
    pLayout2->setMargin(10);
    pLayout2->setAlignment(Qt::AlignmentFlag::AlignLeft);
    pLayout2->addWidget(pBtn3);
    pLayout2->addWidget(pBtn4);

    QTabWidget *pTab = new QTabWidget(&w);
    pTab->addTab(pGroup1, "fruit");
    pTab->addTab(pGroup2, "telephone");

    w.setCentralWidget(pTab);
    w.setWindowTitle("container test");
    w.setMinimumSize(50,50);
    w.show();
    return a.exec();
}

Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidgetQt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120088.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月28日 下午10:00
下一篇 2021年12月28日 下午11:00


相关推荐

  • STM32 定时器的几种基本使用

    STM32 定时器的几种基本使用title STM32 外设 Timer 定时器 date 2020 05 2014 43 52tags categories STM32 学习记录对定时器的基本认识先来看看这种 MCU 有多少定时器 定时器分为 3 类 基本定时器的功能最少 只能充当基本的时基 甚至都没有外部引脚 通用定时器拥有基本定时器的全部功能 同时有输入捕获模式 用以接收外部的 PWM 脉冲之类的信息 也有高级定时器又有通用定时器的全部功能 又有互补输出模式 功能最为强大先具体看一下夹在中间的通用定时器的官方文

    2026年2月23日
    2
  • windows访问smb服务器(samba服务器连接错误)

    在运行里面输入:\\xxx.xxx.xxx.xxx即可访问远程服务器转载于:https://www.cnblogs.com/liyuanhong/p/10671475.html

    2022年4月15日
    60
  • es6 模板字符串_es6 方法模板渲染

    es6 模板字符串_es6 方法模板渲染前言ES6(ES2015)为JavaScript引入了许多新特性,其中与字符串处理相关的一个新特性——模板字面量,提供了多行字符串、字符串模板的功能,相信很多人已经在使用了。字符串模板的基本使用很简单,今天就带大家来了解了解模板字符串。一、基本使用1、传统字符串传统做法需要使用大量的“”(双引号)和+来拼接才能得到我们需要的模版。但是这样是十分不方便的。并且存下一下几点缺陷:1)传统的字符串拼接不能正常换行2)传统的字符串拼接不能友好的插入变量3)传统的字符串拼接不能友好的处理单引号、双引

    2022年8月21日
    9
  • mysql启动命令 linux命令,linux下mysql 启动命令

    mysql启动命令 linux命令,linux下mysql 启动命令1,使用service启动、关闭MySQL服务servicemysqlstartservicemysqlstopservicemysqlrestart运行上面命令,其实是service命令去找/etc/init.d下的相关的mysql脚本去执行启动、关闭动作。2,使用/etc/init.d/mysql启动、关闭MySQL服务,[root@DB-Serverbin]#/etc/in…

    2022年5月21日
    61
  • 大数据开发工作累吗?

    大数据开发工作累吗?在大数据时代的背景下,出现了另一类程序员—大数据开发工程师,他们因为掌握着前沿的大数据相关技术,深受企业重视,找工作容易收入也非常高,但作为IT行业的又一分类,是否加班牵动了无数转行者的心!对于大数据开发工作是否加班的这个问题,不能一概而论,需根据公司的实际情况而定,有些公司有加班的氛围,即使非IT岗,也会有加班的情况,这样的公司大数据开发肯定会加班无疑的;有些公司不鼓励加班,会根据大数据开发…

    2022年6月2日
    186
  • linux读取 第一个分区 命令,partprobe命令

    linux读取 第一个分区 命令,partprobe命令partprobe 命令用于重读分区表 当出现删除文件后 出现仍然占用空间 可以 partprobe 在不重启的情况下重读分区 语法 partprobe 选项 参数 选项 d 不更新内核 s 显示摘要和分区 h 显示帮助信息 v 显示版本信息 参数设备 指定需要确认分区表改变的硬盘对应的设备文件 实例使用 partprobe 不重启系统添加新的磁盘分区 主机自带硬盘超过 300GB 目前只划分使用了 3 个

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号