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


相关推荐

  • Markdown修改字体颜色

    Markdown修改字体颜色在写 blog 时 想高亮某些字 但是发现 markdown 更改字体颜色不像 word 里那么方便 于是查了一下 要用一下代码进行更改字体颜色 还可以更改字体大小 还有字体格式 font 更改语法你的内容 font 更改语法有 color 0099ff 更改字体颜色 face 黑体 更改字体 size 7 更改字体大小 fontface 黑体

    2026年3月16日
    2
  • java怎么输入字符_java怎么输入一个字符

    java怎么输入字符_java怎么输入一个字符思路:先创建一个Scanner对象,调用Scanner对象的next()方法获取控制台输入的字符串,返回的是一个String类型,因为没有nextChar()方法,所以调用String的charAt(0)方法获取第一个字符,这样一来,我们就输入了一个字符串。输入一个字符的方法:importjava.util.Scanner;Scannerscanner=newScanner(System…

    2022年7月8日
    33
  • pdaf添加实例(2p7,type2)[通俗易懂]

    pdaf添加实例(2p7,type2)[通俗易懂]/***s5k2p7_pdaf.h**Copyright(c)2015QualcommTechnologies,Inc.*AllRightsReserved.*ConfidentialandProprietary-QualcommTechnologies,Inc.*/.vendor_id=QTI,.stats_dt=0x30

    2025年9月28日
    5
  • IDEA 全局搜索全局替换快捷键

    IDEA 全局搜索全局替换快捷键用惯 eclips 的可能 ctrl h 一个键就能搞定查找所有和替换全部 idea 的全局搜索和替换是分开看用的 此次记录为 windowidea 默认快捷键使用全局搜索 ctrl shift f 全局替换 ctrl shift r 文件内搜索 ctrl f 文件内替换 ctrl r 当然单独用 ctrl shift r 和 nbsp ctrl r 是完全可以替代 ctrl shift f nbsp

    2026年3月26日
    2
  • mongodb菜鸟教程_mongodb怎么用

    mongodb菜鸟教程_mongodb怎么用MongoVUE是一个关于mongodb数据库管理的工具,并且免费,但超过15天后功能受限。我们可以通过删除mongodb相应的注册表项来解除限制。其步骤如下:1.运行‘win+R’;2.输入‘regedit’,如下图所示:3.进入注册表编辑器,找到与mongodb相关的注册表项,并将里面的注册表项全部删除,如下所示:4.最后可以发现mongovue可以正常使用了,mongovue被激活成功教程了。5.细…

    2022年8月21日
    12
  • strstr函数用法小结

    strstr函数用法小结strstr函数原型:char*strstr(char*str1,char*str2);功能就是找出在字符串str1中第一次出项字符串str2的位置(也就是说字符串sr1中要包含有字符串str2),找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是null)。在C语言中strchr和strst

    2022年10月16日
    6

发表回复

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

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