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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • N70/N72常见问题汇总

    N70/N72常见问题汇总引自:http://bbs.imobile.com.cn/viewthread.php?tid=1092547这里是一些常见的问题,求助前请看里面有没有你需要的答案,或者善用论坛的搜索功能已更新至第四楼为什么我看不到手机或内存卡上的system文件夹?在手机上看这个文件夹需要安装第三方文件管理软件fileman、SeleQ、Fexplorer等文件管理软件如果要在电脑上看到这个文件夹需要将卡…

  • 一键ghost备份不了的原因_ghost系统恢复

    一键ghost备份不了的原因_ghost系统恢复大家都有想要给重要的东西备份吧,系统也是可以备份还原的,小编这里给大家分享一键Ghost备份还原系统的方法,如果你有需要对系统进行备份或还原就可以用这个一键备份还原方法了。一键Ghost备份还原备份的系统镜像不仅可以在本机进行还原还可以在其他的电脑上还原操作系统,很多朋友需要对系统备份不知道怎么操作,小编接下来就给大家详细介绍操作方法。Ghost系统的备份:1、系统之家一键重装系统是一个非常受欢迎…

  • gitlab4.0备份还原

    gitlab4.0备份还原

  • 【全套完结】数字信号处理—-全套Matlab实验报告【建议保存】「建议收藏」

    目录实验一、熟悉MATLAB环境和基本信号的产生与运算实验一、熟悉MATLAB环境和基本信号的产生与运算实验一、熟悉MATLAB环境和基本信号的产生与运算

  • 英语网址大全_英语浏览器网址

    英语网址大全_英语浏览器网址英语网址大全转载自猫扑(mop.com)翻译http://www.bilinguist.com/汉英论坛,高手云集http://www.chinatranslate.net/中国翻译网,号称全国最大的翻译专业网站http://gb.transea.com/机器即时翻译,适合整体翻译网站及段落,但不够准确。适合一般人http://www.si-china.net自由翻译者冯

    2022年10月22日
  • 微信公众平台实现获取用户OpenID的方法

    微信公众平台实现获取用户OpenID的方法

发表回复

您的电子邮箱地址不会被公开。

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