Qt---ToolBox自由伸展

摘要:
参考:Qt实战12.可自由扩展的ToolBox Qt Xiaolo Blog Garden(cnblogs.com)1主窗口::MainWindow(QWidget*parent)2:QMainWindow(parent)3,ui(newUi::MainWindow)4{5ui-˃setupUi(this);6setWindowTitle(QStringLiteral(“自定义ToolBox演示Qt Xiuo”)

参考: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

免责声明:文章转载自《Qt---ToolBox自由伸展》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WebApi使用Token(OAUTH 2.0方式)怎么消除文件左上角的白色小框?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Kaggle系列1:手把手教你用tensorflow建立卷积神经网络实现猫狗图像分类

去年研一的时候想做kaggle上的一道题目:猫狗分类,但是苦于对卷积神经网络一直没有很好的认识,现在把这篇文章的内容补上去。(部分代码参考网上的,我改变了卷积神经网络的网络结构,其实主要部分我加了一层1X1的卷积层,至于作用,我会在后文详细介绍) 题目地址:猫狗大战 同时数据集也可以在上面下载到。 既然是手把手,那么就要从前期的导入数据开始: 导入...

elementui中自定义Select选择器样式自定义

<el-select v-model="tenantCont" placeholder="请输入机构标识"> <el-option-group v-for="group in options" :key="group.label" :label="group.label"...

python实现labelme样本自动标注

python实现labelme样本自动标注 前言 说明 正文 一、 json文件简介及相关API: 二、 特征区域检测及相应API 三、 计算偏移量以及标注框的新的点集 四、 json文件数据其他修改 前言 公司前段时间做一个项目,需要用到语义分割,样本很多,但是都没有标注,也没有让标注公司弄,只好自己标注,平均两分半一张,一天标200多张...

prometheus-数据展示之grafana部署和数据源配置

1、监控pods 。   prometheus再部署以后,会自带cAdvisor。结果如下: 2、K8S集群状态监控。需要使用kube-state-metrics插件。部署以后 kubernetes.io/cluster-service: "true" 会自动启用监控对象,无需配置 [root@VM_0_48_centos prometheus]#...

PyQt5-网格布局(QGridLayout)-11

1 #demo_12:网格布局 2 import sys 3 from PyQt5.QtWidgets import QApplication,QWidget,QGridLayout,QPushButton,QLineEdit,QTextEdit,QLabel 4 5 class Example(QWidget): 6 def __...

Xamarin.Forms一些常见问题

安装 1、查看Xaramin.Forms的版本 在vs项目中查看引用的包(Xamarin.Forms)的版本,或者直接进文件夹看 C:MicrosoftXamarinNuGetxamarin.forms 可以通过 NuGet 更新到最新的 Xamarin 版本。 开发 XAML 1、xaml中用到的StaticResource的定义 <Setter...