16551需求:PC中最大化和窗口大小变化适配改造

This commit is contained in:
赵民勇 2022-10-08 13:58:39 +08:00
parent ddb38750f6
commit ed2d68ff0a
16 changed files with 629 additions and 109 deletions

View File

@ -185,6 +185,18 @@ bool Utils::checkBootInfoExists()
return true;
}
/**
* @brief
* @return bool
*/
bool Utils::isTablet()
{
QString otaPath = Utils::m_sysRootPath + "/etc/apt/ota_version";
otaPath.replace("//", "/");
return QFile::exists(otaPath);
}
/**
* @brief UUID
* @return UUID

View File

@ -72,6 +72,12 @@ public:
*/
static bool checkBootInfoExists();
/**
* @brief
* @return bool
*/
static bool isTablet();
/**
* @brief UUID
* @return UUID

View File

@ -12,15 +12,19 @@
#define WIDTH_ITEM 36
#define MERGE_IN 8
#define WIDTH_SPACING 5
MyItemWidget::MyItemWidget(QWidget* parent) :
QWidget(parent)
MyItemWidget::MyItemWidget(QWidget* parent, QListWidgetItem *item) :
QWidget(parent),
m_item(item)
{
if (parent && item)
item->setSizeHint(QSize(parent->width() - 5, WIDTH_ITEM));
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
QHBoxLayout *hlayout = new QHBoxLayout;
hlayout->setContentsMargins(5, 2, 2, 2);
hlayout->setSpacing(5);
hlayout->setSpacing(WIDTH_SPACING);
m_label = new MyLabel;
m_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
@ -37,6 +41,8 @@ MyItemWidget::MyItemWidget(QWidget* parent) :
// hlayout->setAlignment(Qt::AlignLeft);
connect(this, &MyItemWidget::setScrollWidth, this, [=](int width) {
if (parent && this->m_item)
item->setSizeHint(QSize(width - 5 - this->m_scrollWidth, WIDTH_ITEM));
int labelWidth = this->m_label->width();
this->m_extWidth = 0;
// 隐藏滚动条时会增加右侧边距
@ -64,7 +70,7 @@ MyItemWidget::MyItemWidget(QWidget* parent) :
int labelWidth = this->m_label->width();
if (checked) {
this->m_buttonDelete->setVisible(true);
this->m_label->setFixedWidth(labelWidth - 5 - m_buttonDelete->width());
this->m_label->setFixedWidth(labelWidth - WIDTH_SPACING - m_buttonDelete->width());
this->m_label->setElidedText(this->m_text, Qt::ElideLeft);
this->m_label->setFontColor(Qt::white);
this->m_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
@ -73,7 +79,7 @@ MyItemWidget::MyItemWidget(QWidget* parent) :
this->m_checked = true;
} else {
this->m_buttonDelete->setVisible(false);
this->m_label->setFixedWidth(labelWidth + 5 + m_buttonDelete->width());
this->m_label->setFixedWidth(labelWidth + WIDTH_SPACING + m_buttonDelete->width());
this->m_label->setElidedText(this->m_text, Qt::ElideLeft);
this->m_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
this->m_label->setStyleSheet("QLabel {color:palette(windowText)}"
@ -82,7 +88,32 @@ MyItemWidget::MyItemWidget(QWidget* parent) :
}
});
connect(m_buttonDelete, &QPushButton::clicked, this, &MyItemWidget::deleteItem);
connect(this, &MyItemWidget::resetItemWidth, this, [=](int width) {
if (parent && item) {
QListWidget *parentWidget = qobject_cast<QListWidget *>(parent);
QScrollBar *vertScroll = parentWidget->verticalScrollBar();
int scrollWidth = 0;
if (vertScroll->isVisible()) {
scrollWidth = vertScroll->size().width();
}
this->m_scrollWidth = scrollWidth;
item->setSizeHint(QSize(width - 5 - this->m_scrollWidth, WIDTH_ITEM));
}
if (this->m_buttonDelete->isVisible()) {
this->m_label->setFixedWidth(width - WIDTH_SPACING - m_buttonDelete->width() - 7 - this->m_scrollWidth);
this->m_label->setElidedText(this->m_text, Qt::ElideLeft);
this->m_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
} else {
this->m_label->setFixedWidth(width - WIDTH_SPACING - 2 - this->m_scrollWidth);
this->m_label->setElidedText(this->m_text, Qt::ElideLeft);
this->m_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
}
});
connect(m_buttonDelete, &QPushButton::clicked, this, [=]() {
this->m_item = nullptr;
emit deleteItem();
});
this->setLayout(hlayout);
}
@ -156,6 +187,11 @@ BackupListWidget::BackupListWidget(QWidget *parent /*= nullptr*/, QHBoxLayout *p
}
}
});
// 大小改变
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
emit this->resetItemWidth(this->width());
});
}
BackupListWidget::~BackupListWidget()
@ -181,8 +217,7 @@ bool BackupListWidget::appendItem(const QString &text)
++count;
QListWidgetItem *item = new QListWidgetItem(this, m_type);
item->setSizeHint(QSize(this->width() - 5, WIDTH_ITEM));
MyItemWidget *widget = new MyItemWidget;
MyItemWidget *widget = new MyItemWidget(this, item);
this->setItemWidget(item, widget);
// 必须将scrollToBottom等这种滚动条操作放到判断滚动条是否显示isVisible之前
this->scrollToBottom();
@ -195,7 +230,6 @@ bool BackupListWidget::appendItem(const QString &text)
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);
}
@ -222,6 +256,8 @@ bool BackupListWidget::appendItem(const QString &text)
}
});
connect(this, &BackupListWidget::resetItemWidth, widget, &MyItemWidget::resetItemWidth);
m_plusLogo->setVisible(false);
m_plusText->setVisible(false);
emit this->addedItem();

View File

@ -14,7 +14,7 @@ class MyItemWidget : public QWidget
{
Q_OBJECT
public:
explicit MyItemWidget(QWidget* parent = nullptr);
explicit MyItemWidget(QWidget* parent = nullptr, QListWidgetItem *item = nullptr);
virtual ~MyItemWidget();
void setSize(int width, int height);
@ -29,6 +29,7 @@ signals:
void selected(bool checked);
void deleteItem();
void setScrollWidth(int width);
void resetItemWidth(int width);
private:
QString m_text;
@ -37,6 +38,8 @@ private:
int m_scrollWidth = 0; //父窗口QListWidget的滚动条宽度
int m_extWidth = 0; //去掉父窗口QListWidget的父窗口QFrame的右侧边距时扩展的宽度
bool m_checked = false;
QListWidgetItem *m_item;
};
class BackupListWidget : public QListWidget
@ -74,6 +77,7 @@ signals:
void deleteEmpty();
void addedItem();
void setScrollWidth(int width);
void resetItemWidth(int width);
private:
bool checkPathLimit(const QString &path);

View File

@ -89,6 +89,31 @@ MyLabel::MyLabel(const QString& text, QWidget* parent /*= nullptr*/, Qt::Alignme
MyLabel::~MyLabel()
{}
void MyLabel::setMaxLenText()
{
QFontMetrics fontMetrics(this->font());
int fontSize = fontMetrics.width(this->m_text);
if (this->m_maxWidth > 0 && fontSize >= this->m_maxWidth) {
this->setFixedWidth(this->m_maxWidth);
this->setWordWrap(true);
} else {
this->setFixedWidth(fontSize);
}
this->setText(this->m_text);
}
/**
* @brief
* @param text
* @param length
*/
void MyLabel::setMaxLenText(const QString& text, int width)
{
m_text = text;
m_maxWidth = width;
setMaxLenText();
}
/**
* @brief
* @param text

View File

@ -16,6 +16,7 @@ public:
const QString & getOriginalText() const { return m_text; }
void setDeplayText(const QString& text) { m_text = text; this->setText(text);}
void setElidedText(const QString& text, Qt::TextElideMode mode = Qt::ElideRight);
void setMaxLenText(const QString& text, int width);
void setFontColor(QColor color);
void setFontSize(int size);
void setFontWordWrap(bool on);
@ -25,13 +26,16 @@ protected:
// 主要因为字体变化而重绘故暂不重写paintEvent改为在构造方法中监控主题的字体家族和大小变化
// void paintEvent(QPaintEvent *event);
private:
void setMaxLenText();
private:
QString m_text;
bool m_bWordWrap = false;
int m_width = 0;
int m_height = 0;
int m_maxWidth = 0;
bool m_isOriginal = false;
bool m_needResize = false;
QRect m_rect;
QColor m_fontColor;

View File

@ -28,6 +28,9 @@ signals:
// 强调色变化
void themeColorChanged();
// 控件宽度发生变化
void widthChanged();
};
#endif // GLOBALSIGNALS_H

View File

@ -43,6 +43,7 @@ GSettingsWrapper::GSettingsWrapper(token)
// 字体大小或字体类型发生变化
int fontSize = m_pGsettingThemeData->get("system-font-size").toInt();
emit GlobelBackupInfo::inst().getGlobalSignals()->fontChanged(fontSize);
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
} else if (key == COLOR_QT_KEY) {
// 强调色变化
emit GlobelBackupInfo::inst().getGlobalSignals()->themeColorChanged();

View File

@ -71,29 +71,34 @@ void MainDialog::initUI()
m_totalHLayout->setSpacing(0);
ui->centralwidget->setLayout(m_totalHLayout);
// 左栏窗口
if (GlobelBackupInfo::inst().isManager())
m_leftSiderBarWidget = new LeftsiderbarWidget(ui->centralwidget);
else
m_leftSiderBarWidget = new LeftsiderbarWidget(ui->centralwidget, LeftsiderbarWidget::StartMode::std_user);
m_leftSiderBarWidget->setObjectName(QString::fromUtf8("m_leftSiderBarWidget"));
m_leftSiderBarWidget->setFixedSize(200, 640);
m_leftSiderBarWidget->setFixedWidth(200);
//m_leftSiderBarWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
m_leftSiderBarWidget->initUi();
m_totalHLayout->addWidget(m_leftSiderBarWidget);
// 右侧窗口
m_rightWidget = new MyWidget;
//m_rightWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_rightVLayout = new QVBoxLayout;
m_rightVLayout->setObjectName(QString::fromUtf8("m_rightVLayout"));
m_rightVLayout->setContentsMargins(0, 0, 0, 0);
m_rightVLayout->setSpacing(0);
// 右侧窗口:标题栏
m_titleWidget = new QWidget;
m_titleWidget->setObjectName(QString::fromUtf8("m_titleWidget"));
m_titleWidget->setFixedSize(760, 40);
m_titleWidget->setFixedHeight(40);
m_rightVLayout->addWidget(m_titleWidget);
m_rightVLayout->addStretch();
// 右侧窗口:工作区
if (GlobelBackupInfo::inst().isManager() && GlobelBackupInfo::inst().hasArgRestore())
selected(FuncTypeConverter::FunType::RESTORE_SYSTEM);
else if (!GlobelBackupInfo::inst().isManager() && GlobelBackupInfo::inst().hasArgRestore())
@ -105,7 +110,6 @@ void MainDialog::initUI()
m_rightWidget->setLayout(m_rightVLayout);
m_totalHLayout->addWidget(m_rightWidget);
m_totalHLayout->addStretch();
initTileBar();
}
@ -114,14 +118,16 @@ void MainDialog::initTileBar()
{
m_titleLayout = new QHBoxLayout;
m_titleLayout->setContentsMargins(8, 4, 4, 0);
m_titleLayout->setSpacing(0);
m_titleLayout->setSpacing(4);
m_menuOptionBtn = new QToolButton;
m_minBtn = new QPushButton;
m_maxBtn = new QPushButton;
m_closeBtn = new QPushButton;
m_menuOptionBtn->setToolTip(tr("Main menu"));
m_minBtn->setToolTip(tr("Minimize"));
m_maxBtn->setToolTip(tr("Maximize"));
m_closeBtn->setToolTip(tr("Close"));
m_menuOptionBtn->setProperty("isWindowButton", 0x1);
@ -130,21 +136,24 @@ void MainDialog::initTileBar()
m_menuOptionBtn->setFixedSize(30, 30);
m_menuOptionBtn->setAutoRaise(true);
m_menuOptionBtn->setPopupMode(QToolButton::InstantPopup);
// m_menuOptionBtn->setProperty("setIconHighlightEffectDefaultColor", m_closeBtn->palette().color(QPalette::Active, QPalette::Base));
m_minBtn->setProperty("isWindowButton", 0x1);
m_minBtn->setProperty("useIconHighlightEffect", 0x2);
m_minBtn->setFixedSize(30, 30);
m_minBtn->setFlat(true);
m_minBtn->setIcon(QIcon::fromTheme("window-minimize-symbolic"));
// m_minBtn->setProperty("setIconHighlightEffectDefaultColor", m_closeBtn->palette().color(QPalette::Active, QPalette::Base));
m_maxBtn->setProperty("isWindowButton", 0x1);
m_maxBtn->setProperty("useIconHighlightEffect", 0x2);
m_maxBtn->setFixedSize(30, 30);
m_maxBtn->setFlat(true);
m_maxBtn->setIcon(QIcon::fromTheme("window-maximize-symbolic"));
m_closeBtn->setProperty("isWindowButton", 0x2);
m_closeBtn->setProperty("useIconHighlightEffect", 0x8);
m_closeBtn->setFixedSize(30, 30);
m_closeBtn->setFlat(true);
m_closeBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
// m_closeBtn->setProperty("setIconHighlightEffectDefaultColor", m_closeBtn->palette().color(QPalette::Active, QPalette::Base));
QMenu* backupMain = new QMenu(m_titleWidget);
backupMain->setObjectName("mainMenu");
@ -173,9 +182,8 @@ void MainDialog::initTileBar()
m_titleLayout->addStretch();
m_titleLayout->addWidget(m_menuOptionBtn);
m_titleLayout->addSpacing(4);
m_titleLayout->addWidget(m_minBtn);
m_titleLayout->addSpacing(4);
m_titleLayout->addWidget(m_maxBtn);
m_titleLayout->addWidget(m_closeBtn);
m_titleWidget->setLayout(m_titleLayout);
}
@ -204,6 +212,17 @@ void MainDialog::initConnect()
//最小化按钮
connect(m_minBtn, &QPushButton::clicked, this, &MainDialog::showMinimized);
//最大化按钮
connect(m_maxBtn, &QPushButton::clicked, this, [=] {
if (isMaximized()) {
showNormal();
m_maxBtn->setIcon(QIcon::fromTheme("window-maximize-symbolic"));
} else {
showMaximized();
m_maxBtn->setIcon(QIcon::fromTheme("window-restore-symbolic"));
}
});
//关闭按钮
connect(m_closeBtn, &QPushButton::clicked, this, &MainDialog::closeBtn);
}
@ -254,7 +273,7 @@ void MainDialog::selected(int func_type)
}
m_stackedWidget->setObjectName(QString::fromUtf8("m_stackedWidget"));
m_stackedWidget->setFixedSize(760, 600);
// m_stackedWidget->setMinimumSize(760, 600);
m_rightVLayout->addWidget(m_stackedWidget);
m_leftSiderBarWidget->setCheckedFunc(func_type);
@ -333,6 +352,11 @@ void MainDialog::closeEvent(QCloseEvent *e)
e->accept();
}
void MainDialog::resizeEvent(QResizeEvent *event) {
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
QMainWindow::resizeEvent(event);
}
void MainDialog::closeBtn()
{
if (this->close()) {

View File

@ -23,6 +23,9 @@ public:
void closeEvent(QCloseEvent *e);
protected:
void resizeEvent(QResizeEvent *event);
public slots:
void sltMessageReceived(const QString &msg);
void closeBtn();
@ -48,6 +51,7 @@ private:
QHBoxLayout *m_titleLayout = nullptr;
QToolButton *m_menuOptionBtn = nullptr;
QPushButton *m_minBtn = nullptr;
QPushButton *m_maxBtn = nullptr;
QPushButton *m_closeBtn = nullptr;
QAction *m_backupHelp = nullptr;

View File

@ -11,7 +11,7 @@
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -24,8 +24,8 @@
</property>
<property name="maximumSize">
<size>
<width>960</width>
<height>640</height>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="windowTitle">

View File

@ -32,6 +32,11 @@
using namespace kdk;
// bigTitle控件前面的宽度24+spacing
#define LEN_TITLE_PRE 50
// labelCheck1、labelCheck2控件前面的宽度10+6+5
#define LEN_DOT_PRE 50
DataBackup::DataBackup(QWidget *parent /*= nullptr*/) :
QStackedWidget(parent),
m_udector(new UdiskDetector()),
@ -65,15 +70,25 @@ DataBackup::~DataBackup()
void DataBackup::initFirstWidget()
{
QWidget *first = new QWidget;
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addStretch();
// 中部布局包含一个独立的窗口,用于大小变化时局部相对不变
QWidget *center = new QWidget;
center->setFixedSize(760, 540);
QHBoxLayout *centerHBoxLayout = new QHBoxLayout;
centerHBoxLayout->addStretch();
centerHBoxLayout->addWidget(center);
centerHBoxLayout->addStretch();
vLayout->addLayout(centerHBoxLayout);
// 图片
PixmapLabel *imageBackup_firstPage = new PixmapLabel(first);
PixmapLabel *imageBackup_firstPage = new PixmapLabel(center);
imageBackup_firstPage->setGeometry(421, 120, 300, 326);
imageBackup_firstPage->setScaledContents(true);
imageBackup_firstPage->setLightAndDarkPixmap(":/images/data_backup.png", ":/images/data_backup_dark.png");
// 系统备份大字提示
MyLabel *labelBackup_firstPage = new MyLabel(first);
MyLabel *labelBackup_firstPage = new MyLabel(center);
labelBackup_firstPage->setDeplayText(tr("Data Backup"));
labelBackup_firstPage->setFixedWidth(500);
labelBackup_firstPage->setFixedHeight(48);
@ -90,7 +105,7 @@ void DataBackup::initFirstWidget()
labelBackup_firstPage->adjustSize();
// 数据备份说明
MyLabel *labelNote_firstPage = new MyLabel(first);
MyLabel *labelNote_firstPage = new MyLabel(center);
labelNote_firstPage->setFixedWidth(700);
labelNote_firstPage->setFixedHeight(24);
labelNote_firstPage->move(41, 180);
@ -105,35 +120,35 @@ void DataBackup::initFirstWidget()
labelNote_firstPage->adjustSize();
// 多点还原
MyIconLabel *iconMultiBackup_firstPage = new MyIconLabel(first);
MyIconLabel *iconMultiBackup_firstPage = new MyIconLabel(center);
iconMultiBackup_firstPage->setGeometry(41, 244, 210, 36);
iconMultiBackup_firstPage->setThemeIcon("ukui-multipoint-symbolic", ":/symbos/ukui-multipoint-symbolic");
iconMultiBackup_firstPage->setDesplayText(tr("Multi-Spot"));
iconMultiBackup_firstPage->setEnabled(false);
// 安全
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(first);
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(center);
iconSecurity_firstPage->setGeometry(231, 244, 180, 36);
iconSecurity_firstPage->setThemeIcon("ukui-bf-security-symbolic", ":/symbos/ukui-bf-security-symbolic");
iconSecurity_firstPage->setDesplayText(tr("Security"));
iconSecurity_firstPage->setEnabled(false);
// 防止数据丢失
MyIconLabel *iconDataLoss_firstPage = new MyIconLabel(first);
MyIconLabel *iconDataLoss_firstPage = new MyIconLabel(center);
iconDataLoss_firstPage->setGeometry(41, 296, 210, 36);
iconDataLoss_firstPage->setThemeIcon("ukui-bf-dataloss-symbolic", ":/symbos/ukui-bf-dataloss-symbolic");
iconDataLoss_firstPage->setDesplayText(tr("Protect Data"));
iconDataLoss_firstPage->setEnabled(false);
// 方便快捷
MyIconLabel *iconSimple_firstPage = new MyIconLabel(first);
MyIconLabel *iconSimple_firstPage = new MyIconLabel(center);
iconSimple_firstPage->setGeometry(231, 296, 180, 36);
iconSimple_firstPage->setThemeIcon("ukui-bf-fast-symbolic", ":/symbos/ukui-bf-fast-symbolic");
iconSimple_firstPage->setDesplayText(tr("Convenient"));
iconSimple_firstPage->setEnabled(false);
// 开始备份按钮
MyPushButton *beginBackup = new MyPushButton(first);
MyPushButton *beginBackup = new MyPushButton(center);
beginBackup->setGeometry(41, 372, 180, 52);
beginBackup->setText(tr("Start Backup"));
beginBackup->setEnabled(true);
@ -152,8 +167,8 @@ void DataBackup::initFirstWidget()
});
// 增量备份按钮
KBorderButton *incrementBackup = new KBorderButton(first);
// MyPushButton *incrementBackup = new MyPushButton(first);
KBorderButton *incrementBackup = new KBorderButton(center);
// MyPushButton *incrementBackup = new MyPushButton(center);
incrementBackup->setFixedHeight(52);
incrementBackup->move(241, 372);
incrementBackup->setText(tr("Update Backup"));
@ -209,11 +224,10 @@ void DataBackup::initFirstWidget()
bottomHBoxLayout->addSpacing(20);
bottomHBoxLayout->setAlignment(Qt::AlignRight);
QVBoxLayout *bottomVBoxLayout = new QVBoxLayout;
bottomVBoxLayout->addStretch();
bottomVBoxLayout->addLayout(bottomHBoxLayout);
bottomVBoxLayout->addSpacing(20);
first->setLayout(bottomVBoxLayout);
vLayout->addStretch();
vLayout->addLayout(bottomHBoxLayout);
vLayout->addSpacing(20);
first->setLayout(vLayout);
connect(backupPointManage, &MyPushButton::clicked, this, [=]() {
ManageBackupPointList backupManager(first, ManageBackupPointList::DATA);
@ -924,7 +938,6 @@ void DataBackup::initThirdWidget()
QHBoxLayout *hlayout = new QHBoxLayout;
hlayout->addStretch();
hlayout->addSpacing(80);
QWidget *centerFont = new QWidget(third);
centerFont->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
QVBoxLayout *vlayoutCenterFont = new QVBoxLayout;
@ -1032,7 +1045,6 @@ void DataBackup::initThirdWidget()
centerFont->setLayout(vlayoutCenterFont);
hlayout->addWidget(centerFont);
hlayout->addSpacing(80);
hlayout->addStretch();
hlayout->setAlignment(Qt::AlignCenter);
vlayout->addLayout(hlayout);
@ -1067,6 +1079,7 @@ void DataBackup::initThirdWidget()
recheck->setVisible(false);
this->on_checkEnv_start();
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 检测结果
@ -1118,6 +1131,39 @@ void DataBackup::initThirdWidget()
}
preStep->setVisible(true);
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelCheck1的宽度
int len_labelCheck1 = 0;
if (labelCheck1->isVisible()) {
QFontMetrics fontMetrics(labelCheck1->font());
len_labelCheck1 = fontMetrics.width(labelCheck1->getOriginalText());
len_labelCheck1 += LEN_DOT_PRE;
}
// 控件labelCheck2的宽度
int len_labelCheck2 = 0;
if (labelCheck2->isVisible()) {
QFontMetrics fontMetrics(labelCheck2->font());
len_labelCheck2 = fontMetrics.width(labelCheck2->getOriginalText());
len_labelCheck2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelCheck1 ? len_title : len_labelCheck1;
len_max = len_max > len_labelCheck2 ? len_max : len_labelCheck2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
addWidget(third);
@ -1281,9 +1327,10 @@ void DataBackup::initForthWidget()
QHBoxLayout *hlayoutCenterLine1 = new QHBoxLayout;
// 备份名称
MyLabel *labelBackupName = new MyLabel(forth);
labelBackupName->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
labelBackupName->setAlignment(Qt::AlignRight | Qt::AlignHCenter);
labelBackupName->setDeplayText(tr("Backup Name"));
QFontMetrics fontMetrics(labelBackupName->font());
int fontSize = fontMetrics.width(labelBackupName->getOriginalText());
labelBackupName->setFixedWidth(fontSize);
MyLineEdit *editBackupName = new MyLineEdit(forth);
editBackupName->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
editBackupName->setMinimumWidth(350);
@ -1303,13 +1350,11 @@ void DataBackup::initForthWidget()
hlayoutCenterLine1->addStretch();
hlayoutCenterLine1->addWidget(labelBackupName);
hlayoutCenterLine1->addWidget(editBackupName);
hlayoutCenterLine1->addSpacing(40);
hlayoutCenterLine1->addStretch();
hlayoutCenterLine1->setAlignment(Qt::AlignCenter);
vlayout->addLayout(hlayoutCenterLine1);
// 中部第二行
// QHBoxLayout *hlayoutCenterLine2 = new QHBoxLayout;
// 备份名称错误提示
MyLabel *labelError = new MyLabel(forth);
labelError->setFixedSize(editBackupName->size());
@ -1318,13 +1363,14 @@ void DataBackup::initForthWidget()
labelError->setVisible(false);
labelError->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
// hlayoutCenterLine2->addStretch();
// hlayoutCenterLine2->addSpacing(labelBackupName->width() + 10); // 和上一行对齐
// hlayoutCenterLine2->addWidget(labelError);
// hlayoutCenterLine2->addSpacing(40);
// hlayoutCenterLine2->addStretch();
// hlayoutCenterLine2->setAlignment(Qt::AlignCenter);
// vlayout->addLayout(hlayoutCenterLine2);
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=]{
QFontMetrics fontMetrics(labelBackupName->font());
int fontSize = fontMetrics.width(labelBackupName->getOriginalText());
labelBackupName->setFixedWidth(fontSize);
if (labelError->isVisible())
labelError->move(editBackupName->geometry().left(), editBackupName->geometry().bottom() + 10);
});
connect(validator, &InputValidator::checked, this, [=](bool valid, QString in, int pos, QChar c) {
if (in.isEmpty())
@ -1391,9 +1437,9 @@ void DataBackup::initForthWidget()
nextStep->setProperty("isImportant", true);
connect(nextStep, &MyPushButton::clicked, this, [=](bool checked) {
Q_UNUSED(checked)
if (labelError->isVisible()) {
/*if (labelError->isVisible()) {
editBackupName->setFocus();
} else {
} else*/ {
QString backupName = editBackupName->text();
if (backupName.isEmpty()) {
backupName = editBackupName->placeholderText();
@ -1922,9 +1968,6 @@ void DataBackup::initLastWidget()
resultLogo->setVisible(true);
// 备份成功
bigTitle->setDeplayText(tr("The backup is successful"));
QFontMetrics fontMetrics(bigTitle->font());
int fontSize = fontMetrics.width(bigTitle->getOriginalText());
bigTitle->setFixedWidth(fontSize);
hlayoutCenterFont1->setAlignment(Qt::AlignCenter);
dot1->setVisible(false);
@ -1951,6 +1994,38 @@ void DataBackup::initLastWidget()
homePage->setVisible(true);
}
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelError1的宽度
int len_labelError1 = 0;
if (labelError1->isVisible()) {
QFontMetrics fontMetrics(labelError1->font());
len_labelError1 = fontMetrics.width(labelError1->getOriginalText());
len_labelError1 += LEN_DOT_PRE;
}
// 控件labelError2的宽度
int len_labelError2 = 0;
if (labelError2->isVisible()) {
QFontMetrics fontMetrics(labelError2->font());
len_labelError2 = fontMetrics.width(labelError2->getOriginalText());
len_labelError2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelError1 ? len_title : len_labelError1;
len_max = len_max > len_labelError2 ? len_max : len_labelError2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
// 再试一次

View File

@ -25,6 +25,10 @@
#include "kborderbutton.h"
using namespace kdk;
// bigTitle控件前面的宽度24+spacing
#define LEN_TITLE_PRE 50
// labelCheck1、labelCheck2控件前面的宽度10+6+5
#define LEN_DOT_PRE 50
DataRestore::DataRestore(QWidget *parent) :
QStackedWidget(parent)
@ -50,15 +54,28 @@ DataRestore::~DataRestore()
void DataRestore::initFirstWidget()
{
QWidget *first = new QWidget;
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addStretch();
// 中部布局包含一个独立的窗口,用于大小变化时局部相对不变
QWidget *center = new QWidget;
center->setFixedSize(760, 540);
QHBoxLayout *centerHBoxLayout = new QHBoxLayout;
centerHBoxLayout->addStretch();
centerHBoxLayout->addWidget(center);
centerHBoxLayout->addStretch();
vLayout->addLayout(centerHBoxLayout);
vLayout->addStretch();
vLayout->addSpacing(60);
first->setLayout(vLayout);
// 图片
PixmapLabel *imageRestore_firstPage = new PixmapLabel(first);
PixmapLabel *imageRestore_firstPage = new PixmapLabel(center);
imageRestore_firstPage->setGeometry(421, 120, 300, 326);
imageRestore_firstPage->setScaledContents(true);
imageRestore_firstPage->setLightAndDarkPixmap(":/images/data_restore.png", ":/images/data_restore_dark.png");
// 数据还原大字提示
MyLabel *labelRestore_firstPage = new MyLabel(first);
MyLabel *labelRestore_firstPage = new MyLabel(center);
labelRestore_firstPage->setDeplayText(tr("Data Restore"));
labelRestore_firstPage->setFixedWidth(500);
labelRestore_firstPage->setFixedHeight(48);
@ -72,7 +89,7 @@ void DataRestore::initFirstWidget()
labelRestore_firstPage->adjustSize();
// 数据还原说明
MyLabel *labelNote_firstPage = new MyLabel(first);
MyLabel *labelNote_firstPage = new MyLabel(center);
labelNote_firstPage->setFixedWidth(700);
labelNote_firstPage->setFixedHeight(24);
labelNote_firstPage->move(41, 180);
@ -85,35 +102,35 @@ void DataRestore::initFirstWidget()
labelNote_firstPage->adjustSize();
// 快速恢复
MyIconLabel *iconSimple_firstPage = new MyIconLabel(first);
MyIconLabel *iconSimple_firstPage = new MyIconLabel(center);
iconSimple_firstPage->setGeometry(41, 244, 210, 36);
iconSimple_firstPage->setThemeIcon("object-rotate-left-symbolic", ":/symbos/object-rotate-left-symbolic");
iconSimple_firstPage->setDesplayText(tr("Fast Recovery"));
iconSimple_firstPage->setEnabled(false);
// 安全可靠
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(first);
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(center);
iconSecurity_firstPage->setGeometry(231, 244, 180, 36);
iconSecurity_firstPage->setThemeIcon("ukui-bf-security-symbolic", ":/symbos/ukui-bf-security-symbolic");
iconSecurity_firstPage->setDesplayText(tr("Security"));
iconSecurity_firstPage->setEnabled(false);
// 防止数据丢失
MyIconLabel *iconMultiBackup_firstPage = new MyIconLabel(first);
MyIconLabel *iconMultiBackup_firstPage = new MyIconLabel(center);
iconMultiBackup_firstPage->setGeometry(41, 296, 210, 36);
iconMultiBackup_firstPage->setThemeIcon("ukui-bf-dataloss-symbolic", ":/symbos/ukui-bf-dataloss-symbolic");
iconMultiBackup_firstPage->setDesplayText(tr("Protect Data"));
iconMultiBackup_firstPage->setEnabled(false);
// 自主操作
MyIconLabel *iconSmallSize_firstPage = new MyIconLabel(first);
MyIconLabel *iconSmallSize_firstPage = new MyIconLabel(center);
iconSmallSize_firstPage->setGeometry(231, 296, 180, 36);
iconSmallSize_firstPage->setThemeIcon("ukui-self-help-symbolic", ":/symbos/ukui-self-help-symbolic");
iconSmallSize_firstPage->setDesplayText(tr("Independent"));
iconSmallSize_firstPage->setEnabled(false);
// 开始还原按钮
MyPushButton *beginRestore = new MyPushButton(first);
MyPushButton *beginRestore = new MyPushButton(center);
beginRestore->setGeometry(41, 372, 180, 52);
beginRestore->setText(tr("Start Restore"));
beginRestore->setEnabled(true);
@ -400,6 +417,7 @@ void DataRestore::initSecondWidget()
recheck->setVisible(false);
this->on_checkEnv_start();
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 检测结果
@ -451,6 +469,38 @@ void DataRestore::initSecondWidget()
}
preStep->setVisible(true);
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelCheck1的宽度
int len_labelCheck1 = 0;
if (labelCheck1->isVisible()) {
QFontMetrics fontMetrics(labelCheck1->font());
len_labelCheck1 = fontMetrics.width(labelCheck1->getOriginalText());
len_labelCheck1 += LEN_DOT_PRE;
}
// 控件labelCheck2的宽度
int len_labelCheck2 = 0;
if (labelCheck2->isVisible()) {
QFontMetrics fontMetrics(labelCheck2->font());
len_labelCheck2 = fontMetrics.width(labelCheck2->getOriginalText());
len_labelCheck2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelCheck1 ? len_title : len_labelCheck1;
len_max = len_max > len_labelCheck2 ? len_max : len_labelCheck2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
// 重新检查
@ -968,6 +1018,38 @@ void DataRestore::initLastWidget()
reboot->setVisible(false);
hlayoutCenterFont1->setAlignment(Qt::AlignLeft);
}
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelError1的宽度
int len_labelError1 = 0;
if (labelError1->isVisible()) {
QFontMetrics fontMetrics(labelError1->font());
len_labelError1 = fontMetrics.width(labelError1->getOriginalText());
len_labelError1 += LEN_DOT_PRE;
}
// 控件labelError2的宽度
int len_labelError2 = 0;
if (labelError2->isVisible()) {
QFontMetrics fontMetrics(labelError2->font());
len_labelError2 = fontMetrics.width(labelError2->getOriginalText());
len_labelError2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelError1 ? len_title : len_labelError1;
len_max = len_max > len_labelError2 ? len_max : len_labelError2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
// 再试一次

View File

@ -26,6 +26,10 @@
#include "kborderbutton.h"
using namespace kdk;
// bigTitle控件前面的宽度24+spacing
#define LEN_TITLE_PRE 50
// labelCheck1、labelCheck2控件前面的宽度10+6+5
#define LEN_DOT_PRE 50
GhostImage::GhostImage(QWidget *parent) :
QStackedWidget(parent),
@ -59,15 +63,28 @@ GhostImage::~GhostImage()
void GhostImage::initFirstWidget()
{
QWidget *first = new QWidget;
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addStretch();
// 中部布局包含一个独立的窗口,用于大小变化时局部相对不变
QWidget *center = new QWidget;
center->setFixedSize(760, 540);
QHBoxLayout *centerHBoxLayout = new QHBoxLayout;
centerHBoxLayout->addStretch();
centerHBoxLayout->addWidget(center);
centerHBoxLayout->addStretch();
vLayout->addLayout(centerHBoxLayout);
vLayout->addStretch();
vLayout->addSpacing(60);
first->setLayout(vLayout);
// 图片
PixmapLabel *imageGhost_firstPage = new PixmapLabel(first);
PixmapLabel *imageGhost_firstPage = new PixmapLabel(center);
imageGhost_firstPage->setGeometry(421, 120, 300, 326);
imageGhost_firstPage->setScaledContents(true);
imageGhost_firstPage->setLightAndDarkPixmap(":/images/ghost_image.png", ":/images/ghost_image_dark.png");
// Ghost Image大字提示
MyLabel *labelGhost_firstPage = new MyLabel(first);
MyLabel *labelGhost_firstPage = new MyLabel(center);
labelGhost_firstPage->setDeplayText(tr("Ghost Image"));
labelGhost_firstPage->setFixedWidth(500);
labelGhost_firstPage->setFixedHeight(48);
@ -84,7 +101,7 @@ void GhostImage::initFirstWidget()
labelGhost_firstPage->adjustSize();
// Ghost说明
MyLabel *labelNote_firstPage = new MyLabel(first);
MyLabel *labelNote_firstPage = new MyLabel(center);
labelNote_firstPage->setFixedWidth(700);
labelNote_firstPage->setFixedHeight(24);
labelNote_firstPage->move(41, 180);
@ -97,35 +114,35 @@ void GhostImage::initFirstWidget()
labelNote_firstPage->adjustSize();
// 操作简单
MyIconLabel *iconSimple_firstPage = new MyIconLabel(first);
MyIconLabel *iconSimple_firstPage = new MyIconLabel(center);
iconSimple_firstPage->setGeometry(41, 244, 180, 36);
iconSimple_firstPage->setThemeIcon("ukui-bf-simple-symbolic", ":/symbos/ukui-bf-simple-symbolic");
iconSimple_firstPage->setDesplayText(tr("Simple"));
iconSimple_firstPage->setEnabled(false);
// 快速
MyIconLabel *iconFast_firstPage = new MyIconLabel(first);
MyIconLabel *iconFast_firstPage = new MyIconLabel(center);
iconFast_firstPage->setGeometry(206, 244, 180, 36);
iconFast_firstPage->setThemeIcon("ukui-bf-fast-symbolic", ":/symbos/ukui-bf-fast-symbolic");
iconFast_firstPage->setDesplayText(tr("Fast"));
iconFast_firstPage->setEnabled(false);
// 安全
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(first);
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(center);
iconSecurity_firstPage->setGeometry(41, 296, 180, 36);
iconSecurity_firstPage->setThemeIcon("ukui-bf-security-symbolic", ":/symbos/ukui-bf-security-symbolic");
iconSecurity_firstPage->setDesplayText(tr("Security"));
iconSecurity_firstPage->setEnabled(false);
// 节省时间
MyIconLabel *iconSimple_firstPage1 = new MyIconLabel(first);
MyIconLabel *iconSimple_firstPage1 = new MyIconLabel(center);
iconSimple_firstPage1->setGeometry(206, 296, 180, 36);
iconSimple_firstPage1->setThemeIcon("document-open-recent-symbolic", ":/symbos/document-open-recent-symbolic");
iconSimple_firstPage1->setDesplayText(tr("Timesaving"));
iconSimple_firstPage1->setEnabled(false);
// 制作镜像按钮
MyPushButton *beginBackup = new MyPushButton(first);
MyPushButton *beginBackup = new MyPushButton(center);
beginBackup->setGeometry(41, 372, 180, 52);
beginBackup->setText(tr("Start Ghost"));
beginBackup->setEnabled(true);
@ -462,6 +479,7 @@ void GhostImage::initThirdWidget()
recheck->setVisible(false);
this->on_checkEnv_start();
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 检测结果
@ -513,6 +531,38 @@ void GhostImage::initThirdWidget()
}
preStep->setVisible(true);
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelError1的宽度
int len_labelError1 = 0;
if (labelCheck1->isVisible()) {
QFontMetrics fontMetrics(labelCheck1->font());
len_labelError1 = fontMetrics.width(labelCheck1->getOriginalText());
len_labelError1 += LEN_DOT_PRE;
}
// 控件labelError2的宽度
int len_labelError2 = 0;
if (labelCheck2->isVisible()) {
QFontMetrics fontMetrics(labelCheck2->font());
len_labelError2 = fontMetrics.width(labelCheck2->getOriginalText());
len_labelError2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelError1 ? len_title : len_labelError1;
len_max = len_max > len_labelError2 ? len_max : len_labelError2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
// 重新检查
@ -1169,6 +1219,38 @@ void GhostImage::initLastWidget()
retry->setVisible(true);
homePage->setVisible(true);
}
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelError1的宽度
int len_labelError1 = 0;
if (labelError1->isVisible()) {
QFontMetrics fontMetrics(labelError1->font());
len_labelError1 = fontMetrics.width(labelError1->getOriginalText());
len_labelError1 += LEN_DOT_PRE;
}
// 控件labelError2的宽度
int len_labelError2 = 0;
if (labelError2->isVisible()) {
QFontMetrics fontMetrics(labelError2->font());
len_labelError2 = fontMetrics.width(labelError2->getOriginalText());
len_labelError2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelError1 ? len_title : len_labelError1;
len_max = len_max > len_labelError2 ? len_max : len_labelError2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
// 再试一次

View File

@ -28,6 +28,10 @@
#include "kborderbutton.h"
using namespace kdk;
// bigTitle控件前面的宽度24+spacing
#define LEN_TITLE_PRE 50
// labelCheck1、labelCheck2控件前面的宽度10+6+5
#define LEN_DOT_PRE 50
SystemBackup::SystemBackup(QWidget *parent /*= nullptr*/) :
QStackedWidget(parent),
@ -61,15 +65,25 @@ SystemBackup::~SystemBackup()
void SystemBackup::initFirstWidget()
{
QWidget *first = new QWidget;
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addStretch();
// 中部布局包含一个独立的窗口,用于大小变化时局部相对不变
QWidget *center = new QWidget;
center->setFixedSize(760, 540);
QHBoxLayout *centerHBoxLayout = new QHBoxLayout;
centerHBoxLayout->addStretch();
centerHBoxLayout->addWidget(center);
centerHBoxLayout->addStretch();
vLayout->addLayout(centerHBoxLayout);
// 图片
PixmapLabel *imageBackup_firstPage = new PixmapLabel(first);
PixmapLabel *imageBackup_firstPage = new PixmapLabel(center);
imageBackup_firstPage->setGeometry(421, 120, 300, 326);
imageBackup_firstPage->setScaledContents(true);
imageBackup_firstPage->setLightAndDarkPixmap(":/images/system_backup.png", ":/images/system_backup_dark.png");
// 系统备份大字提示
MyLabel *labelBackup_firstPage = new MyLabel(first);
MyLabel *labelBackup_firstPage = new MyLabel(center);
labelBackup_firstPage->setDeplayText(tr("System Backup"));
labelBackup_firstPage->setFixedWidth(500);
labelBackup_firstPage->setFixedHeight(48);
@ -86,7 +100,7 @@ void SystemBackup::initFirstWidget()
labelBackup_firstPage->adjustSize();
// 系统备份说明
MyLabel *labelNote_firstPage = new MyLabel(first);
MyLabel *labelNote_firstPage = new MyLabel(center);
labelNote_firstPage->setFixedWidth(700);
labelNote_firstPage->setFixedHeight(24);
labelNote_firstPage->move(41, 180);
@ -98,35 +112,35 @@ void SystemBackup::initFirstWidget()
labelNote_firstPage->adjustSize();
// 多点还原
MyIconLabel *iconMultiBackup_firstPage = new MyIconLabel(first);
MyIconLabel *iconMultiBackup_firstPage = new MyIconLabel(center);
iconMultiBackup_firstPage->setGeometry(41, 244, 180, 36);
iconMultiBackup_firstPage->setThemeIcon("ukui-multipoint-symbolic", ":/symbos/ukui-multipoint-symbolic");
iconMultiBackup_firstPage->setDesplayText(tr("Multi-Spot"));
iconMultiBackup_firstPage->setEnabled(false);
// 体积小
MyIconLabel *iconSmallSize_firstPage = new MyIconLabel(first);
MyIconLabel *iconSmallSize_firstPage = new MyIconLabel(center);
iconSmallSize_firstPage->setGeometry(201, 244, 180, 36);
iconSmallSize_firstPage->setThemeIcon("ukui-volume-symbolic", ":/symbos/ukui-volume-symbolic");
iconSmallSize_firstPage->setDesplayText(tr("Small Size"));
iconSmallSize_firstPage->setEnabled(false);
// 安全
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(first);
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(center);
iconSecurity_firstPage->setGeometry(41, 296, 180, 36);
iconSecurity_firstPage->setThemeIcon("ukui-bf-security-symbolic", ":/symbos/ukui-bf-security-symbolic");
iconSecurity_firstPage->setDesplayText(tr("Security"));
iconSecurity_firstPage->setEnabled(false);
// 操作简单
MyIconLabel *iconSimple_firstPage = new MyIconLabel(first);
MyIconLabel *iconSimple_firstPage = new MyIconLabel(center);
iconSimple_firstPage->setGeometry(201, 296, 180, 36);
iconSimple_firstPage->setThemeIcon("ukui-bf-simple-symbolic", ":/symbos/ukui-bf-simple-symbolic");
iconSimple_firstPage->setDesplayText(tr("Simple"));
iconSimple_firstPage->setEnabled(false);
// 开始备份按钮
MyPushButton *beginBackup = new MyPushButton(first);
MyPushButton *beginBackup = new MyPushButton(center);
beginBackup->setGeometry(41, 372, 180, 52);
beginBackup->setText(tr("Start Backup"));
beginBackup->setEnabled(true);
@ -156,11 +170,10 @@ void SystemBackup::initFirstWidget()
bottomHBoxLayout->addSpacing(20);
bottomHBoxLayout->setAlignment(Qt::AlignRight);
QVBoxLayout *bottomVBoxLayout = new QVBoxLayout;
bottomVBoxLayout->addStretch();
bottomVBoxLayout->addLayout(bottomHBoxLayout);
bottomVBoxLayout->addSpacing(20);
first->setLayout(bottomVBoxLayout);
vLayout->addStretch();
vLayout->addLayout(bottomHBoxLayout);
vLayout->addSpacing(20);
first->setLayout(vLayout);
connect(backupPointManage, &MyPushButton::clicked, this, [=]() {
ManageBackupPointList backupManager(first, ManageBackupPointList::SYSTEM);
@ -595,6 +608,7 @@ void SystemBackup::initThirdWidget()
recheck->setVisible(false);
this->on_checkEnv_start();
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 检测结果
@ -646,6 +660,38 @@ void SystemBackup::initThirdWidget()
}
preStep->setVisible(true);
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelCheck1的宽度
int len_labelCheck1 = 0;
if (labelCheck1->isVisible()) {
QFontMetrics fontMetrics(labelCheck1->font());
len_labelCheck1 = fontMetrics.width(labelCheck1->getOriginalText());
len_labelCheck1 += LEN_DOT_PRE;
}
// 控件labelCheck2的宽度
int len_labelCheck2 = 0;
if (labelCheck2->isVisible()) {
QFontMetrics fontMetrics(labelCheck2->font());
len_labelCheck2 = fontMetrics.width(labelCheck2->getOriginalText());
len_labelCheck2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelCheck1 ? len_title : len_labelCheck1;
len_max = len_max > len_labelCheck2 ? len_max : len_labelCheck2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
addWidget(third);
@ -815,9 +861,10 @@ void SystemBackup::initForthWidget()
QHBoxLayout *hlayoutCenterLine1 = new QHBoxLayout;
// 备份名称
MyLabel *labelBackupName = new MyLabel(forth);
labelBackupName->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
labelBackupName->setAlignment(Qt::AlignRight | Qt::AlignHCenter);
labelBackupName->setDeplayText(tr("Backup Name"));
QFontMetrics fontMetrics(labelBackupName->font());
int fontSize = fontMetrics.width(labelBackupName->getOriginalText());
labelBackupName->setFixedWidth(fontSize);
MyLineEdit *editBackupName = new MyLineEdit(forth);
editBackupName->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
editBackupName->setMinimumWidth(350);
@ -833,7 +880,6 @@ void SystemBackup::initForthWidget()
hlayoutCenterLine1->addStretch();
hlayoutCenterLine1->addWidget(labelBackupName);
hlayoutCenterLine1->addWidget(editBackupName);
hlayoutCenterLine1->addSpacing(40);
hlayoutCenterLine1->addStretch();
hlayoutCenterLine1->setAlignment(Qt::AlignCenter);
vlayout->addLayout(hlayoutCenterLine1);
@ -846,6 +892,15 @@ void SystemBackup::initForthWidget()
labelError->setVisible(false);
labelError->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=]{
QFontMetrics fontMetrics(labelBackupName->font());
int fontSize = fontMetrics.width(labelBackupName->getOriginalText());
labelBackupName->setFixedWidth(fontSize);
if (labelError->isVisible())
labelError->move(editBackupName->geometry().left(), editBackupName->geometry().bottom() + 10);
});
connect(validator, &InputValidator::checked, this, [=](bool valid, QString in, int pos, QChar c) {
if (in.isEmpty())
return;
@ -909,9 +964,9 @@ void SystemBackup::initForthWidget()
nextStep->setProperty("isImportant", true);
connect(nextStep, &MyPushButton::clicked, this, [=](bool checked) {
Q_UNUSED(checked)
if (labelError->isVisible()) {
/*if (labelError->isVisible()) {
editBackupName->setFocus();
} else {
} else*/ {
this->m_backupName = editBackupName->text();
if (this->m_backupName.isEmpty()) {
this->m_backupName = editBackupName->placeholderText();
@ -1422,7 +1477,6 @@ void SystemBackup::initLastWidget()
bigTitle->setIsOriginal(true);
bigTitle->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
hlayoutCenterFont1->addWidget(bigTitle);
// hlayoutCenterFont1->setAlignment(Qt::AlignLeft);
vlayoutCenterFont->addLayout(hlayoutCenterFont1);
// 第二行
@ -1499,9 +1553,6 @@ void SystemBackup::initLastWidget()
resultLogo->setVisible(true);
// 备份成功
bigTitle->setDeplayText(tr("The backup is successful"));
QFontMetrics fontMetrics(bigTitle->font());
int fontSize = fontMetrics.width(bigTitle->getOriginalText());
bigTitle->setFixedWidth(fontSize);
hlayoutCenterFont1->setAlignment(Qt::AlignCenter);
dot1->setVisible(false);
@ -1528,6 +1579,39 @@ void SystemBackup::initLastWidget()
homePage->setVisible(true);
}
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelError1的宽度
int len_labelError1 = 0;
if (labelError1->isVisible()) {
QFontMetrics fontMetrics(labelError1->font());
len_labelError1 = fontMetrics.width(labelError1->getOriginalText());
len_labelError1 += LEN_DOT_PRE;
}
// 控件labelError2的宽度
int len_labelError2 = 0;
if (labelError2->isVisible()) {
QFontMetrics fontMetrics(labelError2->font());
len_labelError2 = fontMetrics.width(labelError2->getOriginalText());
len_labelError2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelError1 ? len_title : len_labelError1;
len_max = len_max > len_labelError2 ? len_max : len_labelError2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
// 再试一次

View File

@ -25,6 +25,10 @@
#include "kborderbutton.h"
using namespace kdk;
// bigTitle控件前面的宽度24+spacing
#define LEN_TITLE_PRE 50
// labelCheck1、labelCheck2控件前面的宽度10+6+5
#define LEN_DOT_PRE 50
SystemRestore::SystemRestore(QWidget *parent) :
QStackedWidget(parent)
@ -53,15 +57,25 @@ SystemRestore::~SystemRestore()
void SystemRestore::initFirstWidget()
{
QWidget *first = new QWidget;
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addStretch();
// 中部布局包含一个独立的窗口,用于大小变化时局部相对不变
QWidget *center = new QWidget;
center->setFixedSize(760, 540);
QHBoxLayout *centerHBoxLayout = new QHBoxLayout;
centerHBoxLayout->addStretch();
centerHBoxLayout->addWidget(center);
centerHBoxLayout->addStretch();
vLayout->addLayout(centerHBoxLayout);
// 图片
PixmapLabel *imageRestore_firstPage = new PixmapLabel(first);
PixmapLabel *imageRestore_firstPage = new PixmapLabel(center);
imageRestore_firstPage->setGeometry(421, 120, 300, 326);
imageRestore_firstPage->setScaledContents(true);
imageRestore_firstPage->setLightAndDarkPixmap(":/images/system_restore.png", ":/images/system_restore_dark.png");
// 系统还原大字提示
MyLabel *labelRestore_firstPage = new MyLabel(first);
MyLabel *labelRestore_firstPage = new MyLabel(center);
labelRestore_firstPage->setDeplayText(tr("System Restore"));
labelRestore_firstPage->setFixedWidth(500);
labelRestore_firstPage->setFixedHeight(48);
@ -75,7 +89,7 @@ void SystemRestore::initFirstWidget()
labelRestore_firstPage->adjustSize();
// 系统还原说明
MyLabel *labelNote_firstPage = new MyLabel(first);
MyLabel *labelNote_firstPage = new MyLabel(center);
labelNote_firstPage->setFixedWidth(700);
labelNote_firstPage->setFixedHeight(24);
labelNote_firstPage->move(41, 180);
@ -88,35 +102,35 @@ void SystemRestore::initFirstWidget()
labelNote_firstPage->adjustSize();
// 操作简单
MyIconLabel *iconSimple_firstPage = new MyIconLabel(first);
MyIconLabel *iconSimple_firstPage = new MyIconLabel(center);
iconSimple_firstPage->setGeometry(41, 244, 210, 36);
iconSimple_firstPage->setThemeIcon("ukui-bf-simple-symbolic", ":/symbos/ukui-bf-simple-symbolic");
iconSimple_firstPage->setDesplayText(tr("Simple"));
iconSimple_firstPage->setEnabled(false);
// 安全可靠
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(first);
MyIconLabel *iconSecurity_firstPage = new MyIconLabel(center);
iconSecurity_firstPage->setGeometry(231, 244, 180, 36);
iconSecurity_firstPage->setThemeIcon("ukui-bf-security-symbolic", ":/symbos/ukui-bf-security-symbolic");
iconSecurity_firstPage->setDesplayText(tr("Security"));
iconSecurity_firstPage->setEnabled(false);
// 修复系统损坏
MyIconLabel *iconMultiBackup_firstPage = new MyIconLabel(first);
MyIconLabel *iconMultiBackup_firstPage = new MyIconLabel(center);
iconMultiBackup_firstPage->setGeometry(41, 296, 210, 36);
iconMultiBackup_firstPage->setThemeIcon("ukui-bf-damage-symbolic", ":/symbos/ukui-bf-damage-symbolic");
iconMultiBackup_firstPage->setDesplayText(tr("Repair"));
iconMultiBackup_firstPage->setEnabled(false);
// 自主操作
MyIconLabel *iconSmallSize_firstPage = new MyIconLabel(first);
MyIconLabel *iconSmallSize_firstPage = new MyIconLabel(center);
iconSmallSize_firstPage->setGeometry(231, 296, 180, 36);
iconSmallSize_firstPage->setThemeIcon("ukui-self-help-symbolic", ":/symbos/ukui-self-help-symbolic");
iconSmallSize_firstPage->setDesplayText(tr("Independent"));
iconSmallSize_firstPage->setEnabled(false);
// 开始还原按钮
MyPushButton *beginRestore = new MyPushButton(first);
MyPushButton *beginRestore = new MyPushButton(center);
beginRestore->setGeometry(41, 372, 180, 52);
beginRestore->setText(tr("Start Restore"));
beginRestore->setEnabled(true);
@ -141,11 +155,10 @@ void SystemRestore::initFirstWidget()
bottomHBoxLayout->addSpacing(40);
bottomHBoxLayout->setAlignment(Qt::AlignRight);
QVBoxLayout *bottomVBoxLayout = new QVBoxLayout;
bottomVBoxLayout->addStretch();
bottomVBoxLayout->addLayout(bottomHBoxLayout);
bottomVBoxLayout->addSpacing(20);
first->setLayout(bottomVBoxLayout);
vLayout->addStretch();
vLayout->addLayout(bottomHBoxLayout);
vLayout->addSpacing(20);
first->setLayout(vLayout);
connect(checkFactoryRestore, &MyCheckBox::stateChanged, this, [=](int state) {
this->m_isFactoryRestore = Qt::Unchecked == state ? false : true;
@ -421,6 +434,7 @@ void SystemRestore::initSecondWidget()
recheck->setVisible(false);
this->on_checkEnv_start();
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 检测结果
@ -472,6 +486,38 @@ void SystemRestore::initSecondWidget()
}
preStep->setVisible(true);
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelError1的宽度
int len_labelError1 = 0;
if (labelCheck1->isVisible()) {
QFontMetrics fontMetrics(labelCheck1->font());
len_labelError1 = fontMetrics.width(labelCheck1->getOriginalText());
len_labelError1 += LEN_DOT_PRE;
}
// 控件labelError2的宽度
int len_labelError2 = 0;
if (labelCheck2->isVisible()) {
QFontMetrics fontMetrics(labelCheck2->font());
len_labelError2 = fontMetrics.width(labelCheck2->getOriginalText());
len_labelError2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelError1 ? len_title : len_labelError1;
len_max = len_max > len_labelError2 ? len_max : len_labelError2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
// 重新检查
@ -977,6 +1023,38 @@ void SystemRestore::initLastWidget()
retry->setVisible(true);
homePage->setVisible(true);
}
emit GlobelBackupInfo::inst().getGlobalSignals()->widthChanged();
});
// 调整中部控件大小
connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::widthChanged, this, [=](){
// 控件bigTitle的宽度
int len_title = 0;
if (bigTitle->isVisible()) {
QFontMetrics fontMetrics(bigTitle->font());
len_title = fontMetrics.width(bigTitle->getOriginalText());
len_title += LEN_TITLE_PRE;
}
// 控件labelError1的宽度
int len_labelError1 = 0;
if (labelError1->isVisible()) {
QFontMetrics fontMetrics(labelError1->font());
len_labelError1 = fontMetrics.width(labelError1->getOriginalText());
len_labelError1 += LEN_DOT_PRE;
}
// 控件labelError2的宽度
int len_labelError2 = 0;
if (labelError2->isVisible()) {
QFontMetrics fontMetrics(labelError2->font());
len_labelError2 = fontMetrics.width(labelError2->getOriginalText());
len_labelError2 += LEN_DOT_PRE;
}
int len_max = len_title > len_labelError1 ? len_title : len_labelError1;
len_max = len_max > len_labelError2 ? len_max : len_labelError2;
if (len_max >= this->width())
len_max = this->width();
centerFont->setFixedWidth(len_max);
});
// 再试一次