ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt---ToolBox自由伸展

2021-07-20 19:36:20  阅读:464  来源: 互联网

标签:widget Qt QVBoxLayout label --- QWidget addWidget new ToolBox


参考:Qt实战12.可自由展开的ToolBox - Qt小罗 - 博客园 (cnblogs.com)  

 1 MainWindow::MainWindow(QWidget *parent)
 2     : QMainWindow(parent)
 3     , ui(new Ui::MainWindow)
 4 {
 5     ui->setupUi(this);
 6     setWindowTitle(QStringLiteral("自定义ToolBox演示  Qt小罗"));
 7     setMinimumSize(300, 400);
 8     resize(300, 450);
 9     QLabel *label[4];
10     for(int i = 0; i < 4; i++){
11         label[i] = new QLabel;
12         label[i]->setFixedSize(300, 200);
13     }
14     label[0]->setStyleSheet("QLabel{background-color:red;}");
15     label[1]->setStyleSheet("QLabel{background-color:green;}");
16     label[2]->setStyleSheet("QLabel{background-color:blue;}");
17     label[3]->setStyleSheet("QLabel{background-color:black;}");
18 
19     ToolBox *toolBox = new ToolBox(this);
20     toolBox->addWidget(QStringLiteral("Qt小罗Box1"), label[0]);
21     toolBox->addWidget(QStringLiteral("Qt小罗Box2"), label[1]);
22     toolBox->addWidget(QStringLiteral("Qt小罗Box3"), label[2]);
23     toolBox->addWidget(QStringLiteral("Qt小罗Box4"), label[3]);
24 
25     setCentralWidget(toolBox);
26 }
 1 #ifndef TOOLBOX_H
 2 #define TOOLBOX_H
 3 
 4 #include <QWidget>
 5 #include <QScrollArea>
 6 #include <QVBoxLayout>
 7 #include "toolpage.hpp"
 8 
 9 class QVBoxLayout;
10 class ToolBox : public QWidget
11 {
12     Q_OBJECT
13 
14 private:
15     QVBoxLayout *m_pContentVBoxLayout;
16     QScrollArea *scrollArea;
17 
18 public:
19     explicit ToolBox(QWidget *parent = nullptr)
20         : QWidget(parent)
21     {
22         QWidget *widget = new QWidget(this);
23 
24         scrollArea = new QScrollArea(this);
25         scrollArea->setWidgetResizable(true);
26 
27         QVBoxLayout *outerLayout = new QVBoxLayout(this);
28         outerLayout->setSpacing(0);
29         outerLayout->setContentsMargins(0, 0, 0, 0);
30         outerLayout->addWidget(scrollArea);
31         this->setLayout(outerLayout);
32         scrollArea->setWidget(widget);
33 
34         m_pContentVBoxLayout = new QVBoxLayout;
35         m_pContentVBoxLayout->setSpacing(2);
36         m_pContentVBoxLayout->setContentsMargins(0, 0, 0, 0);
37 
38         QVBoxLayout *innerLayout = new QVBoxLayout(widget);
39         innerLayout->setSpacing(2);
40         innerLayout->setContentsMargins(0, 0, 0, 0);
41         innerLayout->addLayout(m_pContentVBoxLayout);
42         innerLayout->addStretch(1);
43     }
44 
45     void addWidget(const QString &title, QWidget *widget)
46     {
47         m_pContentVBoxLayout->addWidget(new ToolPage(title, widget, this));
48     }
49 
50 };
51 
52 #endif // TOOLBOX_H
 1 #ifndef TOOLPAGE_H
 2 #define TOOLPAGE_H
 3 
 4 #include <QWidget>
 5 #include <QPushButton>
 6 #include <QVBoxLayout>
 7 
 8 namespace Ui {
 9 class ToolPage;
10 }
11 
12 class QFormLayout;
13 class QLabel;
14 
15 class ToolPage : public QWidget
16 {
17     Q_OBJECT
18 
19 private:
20     QVBoxLayout *widgetLayout;
21     QWidget *widgetContent;
22     QPushButton *pushButtonFold;
23 
24 public:
25     explicit ToolPage(const QString &title, QWidget *widget, QWidget *parent = nullptr)
26         : QWidget(parent)
27     {
28         widgetContent = new QWidget(this);
29         widgetContent->hide();
30         widgetLayout = new QVBoxLayout(widgetContent);
31         widgetLayout->setContentsMargins(0, 0, 0, 0);
32         widgetLayout->setSpacing(0);
33 
34         pushButtonFold = new QPushButton(this);
35         pushButtonFold->setMinimumHeight(26);
36 
37         QVBoxLayout *mainLayout = new QVBoxLayout(this);
38         mainLayout->addWidget(pushButtonFold);
39         mainLayout->addWidget(widgetContent);
40         mainLayout->setSpacing(0);
41         mainLayout->setContentsMargins(0, 0, 0, 0);
42         connect(pushButtonFold, &QPushButton::clicked, this, [=](){
43             widgetContent->setVisible(!widgetContent->isVisible());
44         });
45         pushButtonFold->setText(title);
46         widgetLayout->addWidget(widget);
47     }
48 
49 private:
50     void addWidget(const QString &title, QWidget *widget)
51     {
52         pushButtonFold->setText(title);
53         widgetLayout->addWidget(widget);
54     }
55 
56 
57 
58 };
59 
60 #endif // TOOLPAGE_H

 

标签:widget,Qt,QVBoxLayout,label,---,QWidget,addWidget,new,ToolBox
来源: https://www.cnblogs.com/endenvor/p/15036598.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有