123980 【UKUI 3.1.4 走查】【设计】【备份还原】数据备份 添加路径列表增加间距

This commit is contained in:
zhaominyong 2022-06-23 13:56:42 +08:00
parent 61e40267e8
commit e90cf2a31a
5 changed files with 77 additions and 24 deletions

View File

@ -11,6 +11,7 @@
#include "component/imageutil.h"
#define WIDTH_ITEM 36
#define MERGE_IN 8
MyItemWidget::MyItemWidget(QWidget* parent) :
QWidget(parent)
@ -33,13 +34,22 @@ MyItemWidget::MyItemWidget(QWidget* parent) :
hlayout->addWidget(m_label);
hlayout->addWidget(m_buttonDelete);
hlayout->setAlignment(Qt::AlignLeft);
// hlayout->setAlignment(Qt::AlignLeft);
connect(this, &MyItemWidget::setScrollWidth, this, [=](int width) {
this->m_scrollWidth = width;
int labelWidth = this->m_label->width();
this->m_label->setFixedWidth(labelWidth + (this->m_scrollWidth - width));
this->m_extWidth = 0;
// 隐藏滚动条时会增加右侧边距
if (this->m_scrollWidth > 0 && width == 0)
this->m_extWidth = -1 * MERGE_IN;
// 显示滚动条时去掉右侧边距
else if (this->m_scrollWidth == 0 && width > 0)
this->m_extWidth = MERGE_IN;
this->m_label->setFixedWidth(labelWidth + (this->m_scrollWidth - width) + this->m_extWidth);
this->m_label->setElidedText(this->m_text, Qt::ElideLeft);
this->m_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
this->m_scrollWidth = width;
});
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::fontChanged, this, [=](int fontSize) {
@ -51,16 +61,24 @@ MyItemWidget::MyItemWidget(QWidget* parent) :
});
connect(this, &MyItemWidget::selected, this, [=](bool checked) {
int labelWidth = this->m_label->width();
if (checked) {
this->m_buttonDelete->setVisible(true);
this->m_label->setFixedWidth(this->width() - 12 - 20 - this->m_scrollWidth);
this->m_label->setFixedWidth(labelWidth - 5 - m_buttonDelete->width());
this->m_label->setElidedText(this->m_text, Qt::ElideLeft);
this->m_label->setStyleSheet("color:white");
this->m_label->setFontColor(Qt::white);
this->m_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
this->m_label->setStyleSheet("QLabel {color:white}"
"QToolTip {color:palette(windowText)}");
this->m_checked = true;
} else {
this->m_buttonDelete->setVisible(false);
this->m_label->setFixedWidth(this->width() - 7 - this->m_scrollWidth);
this->m_label->setFixedWidth(labelWidth + 5 + m_buttonDelete->width());
this->m_label->setElidedText(this->m_text, Qt::ElideLeft);
this->m_label->setStyleSheet("color:palette(windowText)");
this->m_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
this->m_label->setStyleSheet("QLabel {color:palette(windowText)}"
"QToolTip {color:palette(windowText)}");
this->m_checked = false;
}
});
@ -72,7 +90,7 @@ MyItemWidget::MyItemWidget(QWidget* parent) :
void MyItemWidget::setText(const QString& text)
{
m_text = text;
m_label->setFixedWidth(this->width() - 7 - this->m_scrollWidth);
// m_label->setFixedWidth(this->width() - 7 - this->m_scrollWidth);
m_label->setElidedText(m_text, Qt::ElideLeft);
m_label->setToolTip(m_text);
}
@ -81,8 +99,9 @@ MyItemWidget::~MyItemWidget()
{
}
BackupListWidget::BackupListWidget(QWidget *parent /*= nullptr*/) :
QListWidget(parent)
BackupListWidget::BackupListWidget(QWidget *parent /*= nullptr*/, QHBoxLayout *parentLayout /*= nullptr*/) :
QListWidget(parent),
m_parentLayout(parentLayout)
{
setSortingEnabled(false);
setAcceptDrops(true);
@ -90,7 +109,12 @@ BackupListWidget::BackupListWidget(QWidget *parent /*= nullptr*/) :
// setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// 设置为无边框默认时为StyledPanel
// setFrameShape(QListWidget::NoFrame);
setFrameShape(QListWidget::NoFrame);
if (parentLayout != nullptr) {
parentLayout->setContentsMargins(MERGE_IN, MERGE_IN, MERGE_IN, MERGE_IN);
setGridSize(QSize(this->width(), 40 + MERGE_IN / 2));
} else
setGridSize(QSize(this->width(), 40));
// 列表为空时,展示一个“+”号图标和拖拽文件提示
m_plusLogo = new QLabel;
@ -163,11 +187,15 @@ bool BackupListWidget::appendItem(const QString &text)
connect(this, &BackupListWidget::setScrollWidth, widget, &MyItemWidget::setScrollWidth);
// 滚动条是否展示
QScrollBar *vertScroll = verticalScrollBar();
if (vertScroll->isVisible())
emit this->setScrollWidth(vertScroll->size().width());
int scrollWidth = 0;
if (vertScroll->isVisible()) {
if (m_parentLayout != nullptr)
m_parentLayout->setContentsMargins(MERGE_IN, MERGE_IN, 0, MERGE_IN);
scrollWidth = vertScroll->size().width();
item->setSizeHint(QSize(this->width() - 5 - scrollWidth, WIDTH_ITEM));
emit this->setScrollWidth(scrollWidth);
}
QRect rect = this->visualItemRect(item);
widget->setBaseSize(rect.width(), rect.height());
widget->setText(text);
m_List << text;
@ -184,8 +212,11 @@ bool BackupListWidget::appendItem(const QString &text)
emit this->deleteEmpty();
} else {
QScrollBar *vertScrollBar = verticalScrollBar();
if (!vertScrollBar->isVisible())
if (!vertScrollBar->isVisible()) {
if (m_parentLayout != nullptr)
m_parentLayout->setContentsMargins(MERGE_IN, MERGE_IN, MERGE_IN, MERGE_IN);
emit this->setScrollWidth(0);
}
}
});

View File

@ -6,6 +6,7 @@
#include <QDropEvent>
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include "mylabel.h"
class MyItemWidget : public QWidget
@ -32,14 +33,16 @@ private:
QString m_text;
MyLabel *m_label;
QPushButton *m_buttonDelete;
int m_scrollWidth = 0;
int m_scrollWidth = 0; //父窗口QListWidget的滚动条宽度
int m_extWidth = 0; //去掉父窗口QListWidget的父窗口QFrame的右侧边距时扩展的宽度
bool m_checked = false;
};
class BackupListWidget : public QListWidget
{
Q_OBJECT
public:
explicit BackupListWidget(QWidget *parent = nullptr);
explicit BackupListWidget(QWidget *parent = nullptr, QHBoxLayout *parentLayout = nullptr);
virtual ~BackupListWidget();
// 添加列表项注意使用本类的功能不能用addItem等基类添加项的方法
@ -78,6 +81,8 @@ private:
int m_type = QListWidgetItem::ItemType::UserType + 1;
QStringList m_List;
QStringList m_pathLimit;
QHBoxLayout *m_parentLayout;
};
#endif // REMOVABLELISTWIDGET_H

View File

@ -370,10 +370,16 @@ void DataBackup::initSecondWidget()
getPathsLimit(pathLimits, siderUrls);
// 备份列表
BackupListWidget *listWidget = new BackupListWidget;
QFrame *listFrame = new QFrame;
listFrame->setFrameShape(QFrame::StyledPanel);
listFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QHBoxLayout * hlayoutFrame = new QHBoxLayout;
listFrame->setLayout(hlayoutFrame);
BackupListWidget *listWidget = new BackupListWidget(listFrame, hlayoutFrame);
listWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
listWidget->setPathLimit(pathLimits);
hlayoutLine5->addWidget(listWidget);
hlayoutFrame->addWidget(listWidget);
hlayoutLine5->addWidget(listFrame);
hlayoutLine5->addSpacing(40);
vlayout->addLayout(hlayoutLine5);
@ -687,10 +693,16 @@ void DataBackup::initSecondWidget_inc()
QList<QUrl> siderUrls;
getPathsLimit(pathLimits, siderUrls);
// 备份列表
BackupListWidget *listWidget = new BackupListWidget;
QFrame *listFrame = new QFrame;
listFrame->setFrameShape(QFrame::StyledPanel);
listFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QHBoxLayout * hlayoutFrame = new QHBoxLayout;
listFrame->setLayout(hlayoutFrame);
BackupListWidget *listWidget = new BackupListWidget(listFrame, hlayoutFrame);
listWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
listWidget->setPathLimit(pathLimits);
hlayoutLine5->addWidget(listWidget);
hlayoutFrame->addWidget(listWidget);
hlayoutLine5->addWidget(listFrame);
hlayoutLine5->addSpacing(40);
vlayout->addLayout(hlayoutLine5);
@ -1250,7 +1262,7 @@ void DataBackup::initForthWidget()
}
// 支持输入中英文数字和部分字符
// QRegExp regx("^[\u4e00-\u9fa5a-zA-Z0-9~!@#$%^&*()-_+={}':;'\\[\\].<>/? ¥()——;《》‘’:“”、?]+$"); //其中匹配中文[\u4e00-\u9fa5]
QRegExp regx("[^<>,; `|#\\^\\$]+");//regx("^[\u4e00-\u9fa5a-zA-Z0-9-@& +():'()——《》‘’:“”]*$");
QRegExp regx("[^<>,;`|#\\^\\$]+");//regx("^[\u4e00-\u9fa5a-zA-Z0-9-@& +():'()——《》‘’:“”]*$");
InputValidator *validator = new InputValidator(regx);
editBackupName->setValidator(validator);
labelBackupName->setFixedHeight(editBackupName->height());
@ -1282,6 +1294,8 @@ void DataBackup::initForthWidget()
// vlayout->addLayout(hlayoutCenterLine2);
connect(validator, &InputValidator::checked, this, [=](bool valid, QString in, int pos, QChar c) {
if (in.isEmpty())
return;
QString text = editBackupName->text();
if (valid) {
if (pos >= MAX_LEN_BACKUPNAME) {

View File

@ -77,6 +77,7 @@ void OperationLog::initFirstWidget()
m_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_tableWidget->setShowGrid(false);
m_tableWidget->hideColumn(1); // 隐藏uuid
m_tableWidget->setFrameShape(QTableWidget::NoFrame);
hlayoutLine3->addWidget(m_tableWidget);
vlayout->addLayout(hlayoutLine3);

View File

@ -792,7 +792,7 @@ void SystemBackup::initForthWidget()
editBackupName->setPlaceholderText(QDateTime::currentDateTime().toString("yy-MM-dd hh:mm:ss"));
// 支持输入中英文数字和部分字符
// QRegExp regx("^[\u4e00-\u9fa5a-zA-Z0-9~!@#$%^&*()-_+={}':;'\\[\\].<>/? ¥()——;《》‘’:“”、?]+$"); //其中匹配中文[\u4e00-\u9fa5]
QRegExp regx("[^<>,; `|#\\^\\$]+");//regx("^[\u4e00-\u9fa5a-zA-Z0-9-@& +():'()——《》‘’:“”]*$");
QRegExp regx("[^<>,;`|#\\^\\$]+");//regx("^[\u4e00-\u9fa5a-zA-Z0-9-@& +():'()——《》‘’:“”]*$");
InputValidator *validator = new InputValidator(regx);
editBackupName->setValidator(validator);
labelBackupName->setFixedHeight(editBackupName->height());
@ -814,6 +814,8 @@ void SystemBackup::initForthWidget()
labelError->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
connect(validator, &InputValidator::checked, this, [=](bool valid, QString in, int pos, QChar c) {
if (in.isEmpty())
return;
QString text = editBackupName->text();
if (valid) {
if (pos >= MAX_LEN_BACKUPNAME) {