mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-27 18:59:26 +08:00
上传项目代码
This commit is contained in:
184
src/widgets/MainWindow.cpp
Normal file
184
src/widgets/MainWindow.cpp
Normal file
@@ -0,0 +1,184 @@
|
||||
#include "MainWindow.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
static std::string DatetimeNow(char c1 = '-', char c2 = ':', char c3 = ' ')
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "%Y" << c1 << "%m" << c1 << "%d" << c3 << "%H" << c2 << "%M" << c2 << "%S";
|
||||
std::string fmt = ss.str();
|
||||
ss.str("");
|
||||
auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
|
||||
ss << std::put_time(std::localtime(&t), fmt.c_str());
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
static const std::string STY_BTN_MENU =
|
||||
"QPushButton{background:rgba(50,128,218,200);color:white;border-radius:5px;border:2px solid rgb(10,120,215);font:bold 18px;}"
|
||||
"QPushButton:hover{background-color:rgb(32,164,128);}"
|
||||
"QPushButton:pressed{border-width:3px 0 0 3px;background-color:rgb(150,150,150);border-style:inset;}"
|
||||
"QPushButton:disabled{color:rgb(150,150,150);}";
|
||||
|
||||
static const std::string STY_BTN_MENU_ACTIVE =
|
||||
"QPushButton{background:rgba(32,164,128,200);color:white;border-radius:5px;border:2px solid rgb(10,255,215);font:bold 18px;}"
|
||||
"QPushButton:hover{background-color:rgb(32,164,128);}"
|
||||
"QPushButton:pressed{border-width:3px 0 0 3px;background-color:rgb(150,150,150);border-style:inset;}"
|
||||
"QPushButton:disabled{color:rgb(150,150,150);}";
|
||||
|
||||
|
||||
void Menu::init(
|
||||
QWidget* parent,
|
||||
int x, int y,
|
||||
std::vector<std::string>& vecMenuId,
|
||||
std::function<void(std::string id)> cb)
|
||||
{
|
||||
int num = vecMenuId.size();
|
||||
x = (1920 - (num*110 - 10))*0.5;
|
||||
|
||||
cb_ = cb;
|
||||
for (int i = 0; i<num; i++)
|
||||
{
|
||||
std::string menuName = vecMenuId[i];
|
||||
auto btn = std::make_shared<QPushButton>(parent);
|
||||
btn->setGeometry(x+i*110, y, 100, 35);
|
||||
btn->setText(menuName.c_str());
|
||||
btn->setFont(QFont("微软雅黑"));
|
||||
if (menuName == curMenuId_)
|
||||
{
|
||||
btn->setStyleSheet(STY_BTN_MENU_ACTIVE.c_str());
|
||||
activeBtn_ = btn.get();
|
||||
}
|
||||
else
|
||||
{
|
||||
btn->setStyleSheet(STY_BTN_MENU.c_str());
|
||||
}
|
||||
vecBtn_.push_back(btn);
|
||||
QObject::connect(btn.get(), &QPushButton::clicked, this, &Menu::onMenuBtnClicked);
|
||||
}
|
||||
}
|
||||
void Menu::onMenuBtnClicked()
|
||||
{
|
||||
QPushButton* btn = qobject_cast<QPushButton*>(sender());
|
||||
std::string menuName = btn->text().toStdString();
|
||||
|
||||
if (menuName == curMenuId_)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
curMenuId_ = menuName;
|
||||
if (activeBtn_) { activeBtn_->setStyleSheet(STY_BTN_MENU.c_str()); }
|
||||
activeBtn_ = btn;
|
||||
activeBtn_->setStyleSheet(STY_BTN_MENU_ACTIVE.c_str());
|
||||
|
||||
if (cb_) { cb_(curMenuId_); }
|
||||
}
|
||||
|
||||
#include "WebHandler.h"
|
||||
#include <QWebChannel>
|
||||
|
||||
MainWindow::MainWindow()
|
||||
{
|
||||
webView = std::make_shared<QWebEngineView>(this);
|
||||
|
||||
MyWebHandler* myWebHandler = new MyWebHandler();
|
||||
QWebChannel* webChannel = new QWebChannel();
|
||||
webChannel->registerObject("cppNative", myWebHandler);
|
||||
webView->page()->setWebChannel(webChannel);
|
||||
|
||||
webView->setGeometry(0, 0, 1920, 1080);
|
||||
// 默认设置透明, 解决加载时的白屏闪烁
|
||||
webView->page()->setBackgroundColor(Qt::transparent);
|
||||
|
||||
webView->setContextMenuPolicy(Qt::NoContextMenu);
|
||||
//webView.load(QUrl("https://www.baidu.com"));
|
||||
webView->load(QUrl("file:///assets/html/main.html"));
|
||||
//connect(wWebView.get(), &QWebEngineView::loadFinished, this, &MyWidget::slotLoadFinished);
|
||||
|
||||
//std::string htmlContent = "HelloWorld";
|
||||
//webView->setHtml(htmlContent.c_str(), QUrl("file:///assets/html/"));
|
||||
webView->show();
|
||||
return;
|
||||
|
||||
QUI::label(labBkg_, this, 0, 0, 1920, 1080, "");
|
||||
labBkg_.setPixmap(QPixmap("assets/ui/bkg01.png"));
|
||||
|
||||
// 顶部区域: 显示系统信息、时间、登录用户信息
|
||||
//QUI::label(labBkgHead_, this, 0, 0, 1920, 114, "");
|
||||
//labBkgHead_.setPixmap(QPixmap("assets/ui/bkg_head.png"));
|
||||
|
||||
// 系统名称
|
||||
QUI::label(labTitle_, this, 100, 20, 520, 50, "", "font:bold 42px;color:white;");
|
||||
// 时钟标签
|
||||
QUI::label(labTime_, this, 50, 25, 320, 40, DatetimeNow().c_str(), "");
|
||||
labTime_.setFont(QFont("微软雅黑", 16, 1000));
|
||||
|
||||
//wPage_ = std::make_shared<WidgetPageHome>(this);
|
||||
//wPage_->setGeometry(0, 115, 1920, 1080-115);
|
||||
//wPage_->show();
|
||||
|
||||
this->initMenu();
|
||||
|
||||
// 登录框
|
||||
wLogin_.setParent(this);
|
||||
wLogin_.show();
|
||||
|
||||
connect(&wLogin_, &WidgetLogin::signalLoginSuccess, this, &MainWindow::slotLoginSuccess);
|
||||
|
||||
QObject::connect(&timer_, &QTimer::timeout, this, &MainWindow::onTimeout);
|
||||
timer_.start(1000);
|
||||
}
|
||||
|
||||
void MainWindow::initMenu()
|
||||
{
|
||||
std::vector<std::string> vecMenuId =
|
||||
{
|
||||
"系统总览", "运行监控", "预测监控", "统计分析", "安全管理", "系统管理", "服务管理", "参数管理"
|
||||
};
|
||||
|
||||
menu_ = std::make_shared<Menu>();
|
||||
menu_->init(this, 740, 1030, vecMenuId, [=](std::string menuId) { this->onMenuClicked(menuId); });
|
||||
|
||||
// 考虑处理二级菜单
|
||||
}
|
||||
|
||||
void MainWindow::resizeEvent(QResizeEvent* event)
|
||||
{
|
||||
auto& size = event->size();
|
||||
if (webView)
|
||||
{
|
||||
webView->resize(size);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::slotLoginSuccess()
|
||||
{
|
||||
wLogin_.hide();
|
||||
onMenuClicked("系统总览");
|
||||
}
|
||||
|
||||
void MainWindow::onMenuClicked(std::string menuId)
|
||||
{
|
||||
auto w = WidgetPage::create(this, menuId);
|
||||
if (w)
|
||||
{
|
||||
w->setGeometry(0, 90, 1920, 950);
|
||||
wPage_ = w;
|
||||
wPage_->show();
|
||||
//wPage_->updateData();
|
||||
}
|
||||
else
|
||||
{
|
||||
wPage_ = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::onTimeout()
|
||||
{
|
||||
if (wPage_)
|
||||
{
|
||||
//wPage_->updateData();
|
||||
}
|
||||
labTime_.setText(DatetimeNow().c_str());
|
||||
}
|
||||
Reference in New Issue
Block a user