205 lines
7.5 KiB
C++
205 lines
7.5 KiB
C++
/*
|
||
* Copyright (C) 2020 ~ 2020 Deepin Technology Co., Ltd.
|
||
*
|
||
* Author: alex <wangpenga@uniontech.com>
|
||
*
|
||
* Maintainer: alex <wangpenga@uniontech.com>
|
||
*
|
||
* This program is free software: you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation, either version 3 of the License, or
|
||
* any later version.
|
||
*
|
||
* This program is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
*/
|
||
#include "mainwindow.h"
|
||
#include "ui_mainwindow.h"
|
||
#include <DTitlebar>
|
||
#include <DSearchEdit>
|
||
#include <denhancedwidget.h>
|
||
#include <DStackedWidget>
|
||
|
||
#include <QTimer>
|
||
|
||
MainWindow::MainWindow(QWidget *parent) :
|
||
DMainWindow(parent),
|
||
ui(new Ui::MainWindow)
|
||
{
|
||
ui->setupUi(this);
|
||
this->setFixedSize(this->size());
|
||
|
||
// 给 title bar 添加搜索框
|
||
DSearchEdit *search = new DSearchEdit;
|
||
search->setPlaceHolder("探索未知领域~");
|
||
this->titlebar()->addWidget(search);
|
||
this->titlebar()->setIcon(QIcon(":/resources/logo_icon.svg"));
|
||
|
||
// 设置 DButtonBox 里面的 button
|
||
DButtonBox *buttonBox = ui->Dtk__Widget__DButtonBox;
|
||
buttonBox->setButtonList({new DButtonBoxButton("浅色模式"), new DButtonBoxButton("深色模式")}, true);
|
||
buttonBox->setId(buttonBox->buttonList().at(0), 0);
|
||
buttonBox->setId(buttonBox->buttonList().at(1), 1);
|
||
if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) {
|
||
buttonBox->buttonList().at(0)->click();
|
||
} else {
|
||
buttonBox->buttonList().at(1)->click();
|
||
}
|
||
|
||
connect(buttonBox, &DButtonBox::buttonClicked, this, [buttonBox](QAbstractButton *button) {
|
||
if (buttonBox->id(button) == 0) {
|
||
DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::LightType);
|
||
} else {
|
||
DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::DarkType);
|
||
}
|
||
});
|
||
titlebar()->addWidget(buttonBox);
|
||
|
||
|
||
// 设置 LineDrawer 里面的内容
|
||
DArrowLineDrawer *expand = ui->Dtk__Widget__DArrowLineDrawer;
|
||
QWidget *content = new QWidget(this);
|
||
QLabel *lab = new QLabel(" 在这里可以显示你想要显示的绝大部分内容", content);
|
||
QFont f(lab->font());
|
||
f.setPixelSize(28);
|
||
f.setWeight(QFont::Medium);
|
||
f.setBold(false);
|
||
lab->setFont(f);
|
||
lab->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter );
|
||
|
||
content->setMinimumHeight(content->height() + expand->height());
|
||
|
||
expand->setTitle("可折叠的提示信息");
|
||
expand->setContent(content);
|
||
expand->setExpand(false);
|
||
|
||
expand->setExpandedSeparatorVisible(false);
|
||
expand->setSeparatorVisible(false);
|
||
|
||
connect(expand, &DArrowLineDrawer::expandChange, [](bool expanded) {
|
||
qDebug() << "DArrow state: " << (expanded ? "expanded" : "closed");
|
||
});
|
||
|
||
DEnhancedWidget *hanceedWidget = new DEnhancedWidget(expand, expand);
|
||
connect(hanceedWidget, &DEnhancedWidget::heightChanged, hanceedWidget, [](int height) {
|
||
qDebug() << "height changed: " << height;
|
||
});
|
||
|
||
// 设置带颜色的进度条的进度
|
||
DColoredProgressBar *clrPBar = ui->Dtk__Widget__DColoredProgressBar;
|
||
clrPBar->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
|
||
clrPBar->addThreshold(10, QBrush(QColor(Qt::black)));
|
||
clrPBar->addThreshold(20, QBrush(QColor(Qt::red)));
|
||
clrPBar->addThreshold(30, QBrush(QColor(Qt::green)));
|
||
clrPBar->addThreshold(40, QBrush(QColor(Qt::blue)));
|
||
clrPBar->addThreshold(50, QBrush(QColor(Qt::cyan)));
|
||
clrPBar->addThreshold(60, QBrush(QColor(Qt::darkGray)));
|
||
clrPBar->addThreshold(70, QBrush(QColor(Qt::black)));
|
||
clrPBar->addThreshold(80, QBrush(QColor(Qt::green)));
|
||
clrPBar->addThreshold(90, QBrush(QColor(Qt::magenta)));
|
||
|
||
QTimer *timer = new QTimer(this->centralWidget());
|
||
connect(timer, &QTimer::timeout, [clrPBar](){
|
||
static int i = 0;
|
||
i++;
|
||
i = i%101;
|
||
clrPBar->setValue(i);
|
||
});
|
||
timer->setInterval(100);
|
||
timer->start();
|
||
|
||
|
||
// 设置不带颜色的进度条的进度
|
||
ui->Dtk__Widget__DProgressBar->setAlignment(Qt::AlignCenter);
|
||
QTimer *timer2 = new QTimer(this->centralWidget());
|
||
connect(timer2, &QTimer::timeout, [this](){
|
||
static int i = 0;
|
||
i++;
|
||
i = i%101;
|
||
ui->Dtk__Widget__DProgressBar->setValue(i);
|
||
|
||
ui->Dtk__Widget__DWaterProgress->setValue(i);
|
||
ui->Dtk__Widget__DWaterProgress->start();
|
||
});
|
||
timer2->setInterval(100);
|
||
timer2->start();
|
||
|
||
ui->Dtk__Widget__DLineEdit->setText("请输入内容");
|
||
|
||
// 设置 floating buttong 的信号槽
|
||
// 要设置默认的 icon、text
|
||
DFloatingButton *fltButton = ui->Dtk__Widget__DFloatingButton;
|
||
fltButton->setFixedSize(40, 40); // TODO: dtk的代码里面设置了 setFixedSize,这里没办法只能这样重新设置
|
||
fltButton->setIcon(QIcon("/usr/share/icons/bloom/actions/24/lock.svg"));
|
||
connect(fltButton, &DFloatingButton::clicked, []{
|
||
qDebug() << "floating button clicked.";
|
||
});
|
||
|
||
// 设置 key seq
|
||
DKeySequenceEdit *keyEditer = ui->Dtk__Widget__DKeySequenceEdit;
|
||
keyEditer->setAlignment(Qt::AlignCenter);
|
||
keyEditer->setKeySequence(QKeySequence(Qt::CTRL + Qt::Key_A)); // 用+号不要用逗号
|
||
connect(ui->Dtk__Widget__DKeySequenceEdit, &DKeySequenceEdit::keySequenceChanged, [] (const QKeySequence &seq) {
|
||
qDebug() << "Key sequence: " << seq;
|
||
});
|
||
|
||
// 设置 CrubEdit
|
||
DCrumbEdit *crumb = ui->Dtk__Widget__DCrumbEdit;
|
||
crumb->appendCrumb("世界");
|
||
crumb->appendCrumb("个性");
|
||
crumb->appendCrumb("色彩");
|
||
|
||
// 设置 DLabel
|
||
// ui->Dtk__Widget__DLabel_2->setText("请输入内容");
|
||
// ui->Dtk__Widget__DLabel_2->setWordWrap(true);
|
||
|
||
// 添加 stackwidget
|
||
DStackedWidget *stackWidget = ui->stackedWidget;
|
||
|
||
// StackWidget 自带了两个 QWidget,自己再加 4 个 QLabel
|
||
stackWidget->widget(0)->setBackgroundRole(QPalette::Midlight);
|
||
stackWidget->widget(0)->setAutoFillBackground(true);
|
||
|
||
stackWidget->widget(1)->setBackgroundRole(QPalette::Shadow);
|
||
stackWidget->widget(1)->setAutoFillBackground(true);
|
||
|
||
int n = 4;
|
||
for (int i = 0; i < n; i++) {
|
||
QLabel *label = new QLabel();
|
||
stackWidget->addWidget(label);
|
||
|
||
label->setAutoFillBackground(true);
|
||
label->setPalette(QPalette(QPalette::Background, QColor(255, 255 * i / n, 255 - 255 * i / n)));
|
||
}
|
||
|
||
// stackWidget->setFocusPolicy(Qt::NoFocus);
|
||
QTimer *timer3 = new QTimer(this->centralWidget());
|
||
connect(timer3, &QTimer::timeout, [this, stackWidget](){
|
||
static int i = 0;
|
||
// stackWidget->widget(i)->setFocusPolicy(Qt::NoFocus);
|
||
stackWidget->setCurrentWidget(stackWidget->widget(i));
|
||
ui->Dtk__Widget__DPageIndicator->setPageCount(stackWidget->count());
|
||
ui->Dtk__Widget__DPageIndicator->setCurrentPage(stackWidget->currentIndex());
|
||
// ui->Dtk__Widget__DPageIndicator->setFocusPolicy(Qt::NoFocus);
|
||
i++;
|
||
i = i % stackWidget->count();
|
||
});
|
||
timer3->setInterval(300);
|
||
// bug: 开启定时器后DCrumbEdit不能输入中文。
|
||
timer3->start();
|
||
|
||
ui->Dtk__Widget__DToolButton_2->setIcon(QIcon("/usr/share/icons/bloom/actions/24/unlock.svg"));
|
||
ui->Dtk__Widget__DSpinner->start();
|
||
}
|
||
|
||
MainWindow::~MainWindow()
|
||
{
|
||
delete ui;
|
||
}
|