软件系统配置UI(QT)

软件系统配置UI(QT)

 

#ifndef XCONFIGDLG_H
#define XCONFIGDLG_H

#include <QFrame>
#include <QDialog>
#include <QScrollArea>
#include <QScrollBar>
#include <QListWidget>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QList>
#include <QLabel>
#include <QCheckBox>


class XConfigDlg : public QDialog
{
    Q_OBJECT
public:
    explicit XConfigDlg(QWidget *parent = nullptr);

Q_SIGNALS:

public Q_SLOTS:

    void slotOnItemClicked(QListWidgetItem *item);

    void onSlotScrollBarValueChanged(int value);

private:
    QFrame *m_layoutWidget = nullptr;       //右侧Widget
    QStringList m_itemNameList;             //左侧QListWidget项目名称
    QVector<QWidget *> m_widgetList;        //右侧项目Widget集合
    QVector<int> m_widgetBottomYPos;        //右侧项目Widget底部Y坐标
    QListWidget *m_leftWidget = nullptr;    //左侧QListWidget
    QScrollArea *m_rightWidget = nullptr;   //右侧滚动区域
    QVBoxLayout *m_pContentVBoxLayout = nullptr;    //右侧m_layoutWidget的布局管理器
    int m_nWidgets = 30;
    void initCtrl();
public:


};

#endif // XCONFIGDLG_H
#include "xconfigdlg.h"
#include <QDebug>
#include <QRandomGenerator>


XConfigDlg::XConfigDlg(QWidget *parent)
    : QDialog(parent)
{
    setFixedSize(700, 480);
    initCtrl();
}

void XConfigDlg::initCtrl()
{
    int leftWidth = 130;
    int rightWidth = width() - leftWidth;
    m_leftWidget = new QListWidget(this);
    m_leftWidget->setStyleSheet("QFrame{background-color:rgb(180,180,180)}");
    m_rightWidget = new QScrollArea(this);
    m_leftWidget->setGeometry(0, 0, 130, height());
    m_rightWidget->setGeometry(leftWidth, 0, rightWidth, height());
    for(int i = 0; i < m_nWidgets; i++){
        m_itemNameList << QString("item %1").arg(i+1);
    }
    m_layoutWidget = new QFrame(this);
    //为标签生成随机背景颜色
    QStringList styleSheets;
    for(int i = 0; i < m_nWidgets; i++){
        styleSheets << QString("QFrame{background-color:rgb(%1,%2,%3)}")
                          .arg(QRandomGenerator::global()->bounded(0,256))
                          .arg(QRandomGenerator::global()->bounded(0,256))
                          .arg(QRandomGenerator::global()->bounded(0,256));
    }
    m_pContentVBoxLayout = new QVBoxLayout(m_layoutWidget);
    m_pContentVBoxLayout->setContentsMargins(0,0,0,0);
    m_pContentVBoxLayout->setSpacing(0);
    int currentY = 0;
    for(int i = 0; i < m_itemNameList.size(); i++){
        QLabel *frame = new QLabel(m_itemNameList[i], m_layoutWidget);
        quint32 randHeight = QRandomGenerator::global()->bounded(30,300);
        frame->setFixedSize(rightWidth, randHeight);
        frame->setStyleSheet(styleSheets.at(i));
        m_widgetList.append(frame);
        m_pContentVBoxLayout->addWidget(frame);
        currentY += frame->height();
        m_widgetBottomYPos.push_back(currentY);
    }

    m_leftWidget->addItems(m_itemNameList);
    connect(m_leftWidget, &QListWidget::itemClicked, this, &XConfigDlg::slotOnItemClicked);
    m_leftWidget->setCurrentRow(0);

    m_rightWidget->setWidgetResizable(true);
    m_rightWidget->setWidget(m_layoutWidget);
    connect(m_rightWidget->verticalScrollBar(), &QScrollBar::valueChanged, this, &XConfigDlg::onSlotScrollBarValueChanged);
}


void XConfigDlg::slotOnItemClicked(QListWidgetItem *item)
{
    int rowIndex = m_leftWidget->row(item);
    int bottomYPos = 0;
    if(rowIndex != 0){
        bottomYPos = m_widgetBottomYPos[rowIndex-1];
    }
    m_rightWidget->verticalScrollBar()->setValue(bottomYPos);
}

void XConfigDlg::onSlotScrollBarValueChanged(int value)
{
    qDebug() << __FUNCTION__;
    int scrollYPos = value;
    qDebug() << "scrollYPos:" << scrollYPos;
    for(int i = 0; i < m_widgetBottomYPos.size(); i++){
        if(m_widgetBottomYPos[i] > scrollYPos){
            m_leftWidget->setCurrentRow(i);
            break;
        }
    }

}

 

上一篇:自动化测试环境搭建之Python3.6+selenium44+firefox


下一篇:uview-ui_index.js