zoukankan      html  css  js  c++  java
  • Qt---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
  • 相关阅读:
    获得SQL语句的模板,自己写类似readtrace时候用
    我的HD2手机
    匹配symbols
    再送一次书
    微软急聘MOSS高手!
    邮件规则的实现
    System.Data.SQLClient.SqlConnection在Open之后为什么需要及时Close?
    windbg中无法加载mscorwks.dll, Win32 error 0n2
    Diablo3狗熊榜
    软件构架师的特点
  • 原文地址:https://www.cnblogs.com/endenvor/p/15036598.html
Copyright © 2011-2022 走看看