ICode9

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

软件系统配置UI(QT)

2022-01-10 18:03:49  阅读:161  来源: 互联网

标签:rightWidget QT int void XConfigDlg UI leftWidget include 软件系统


 

#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;
        }
    }

}

 

标签:rightWidget,QT,int,void,XConfigDlg,UI,leftWidget,include,软件系统
来源: https://www.cnblogs.com/endenvor/p/15785393.html

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

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

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

ICode9版权所有