恢复布局这个功能在整个数据可视化大屏界面电子看板系统中非常有用,很多时候不小心把现有布局拖动乱了,(当然如果不想布局被拖动改动,可以修改配置文件中的MoveEnable参数来控制,默认为真表示可以任意拖动布局,后期如果不想再被拖动可以设置为假。)人总归有不小心的时候,一旦不小心拖动了布局,则可以在软件没有退出之前恢复,鼠标右键菜单增加恢复布局这个功能就很有必要了,在保存布局以前,单击这个恢复布局,会自动恢复到当前布局的初始状态,如果不小心保存布局了,那就只能重新新建布局了,或者如果布局有备份的话就更好。恢复布局只能对当前布局进行恢复,而且是在未保存布局以前,以后就麻烦。
电子看板是目视化管理的一种表现形式,即对数据的状况一目了然地表现,主要是对于管理项目,它通过利用形象直观而又色彩适宜的各种视觉感知信息来组织现场生产活动,目视管理依据人类的生理特征,在生产现场充分利用信号灯、标识牌、符号颜色等方式来发出视觉信号,鲜明准确地刺激人的神经末梢,快速地传递信息,形象直观地将潜在的问题和浪费现象都显现出来。以便任何人都可以及时掌握管理现状和必要的情报,从而能够快速制定并实施应对措施。因此,管理看板是发现问题、解决问题的非常有效且直观的手段,是优秀的现场管理必不可少的工具之一。
void MainWindow::changeLayout(const QString &layout, bool init)
{
//首次加载不需要比较是否和配置文件一样
bool needLoad = init;
if (!init && App::Layout != layout) {
needLoad = true;
//先保存原有布局
saveLayout(App::Layout, 2);
}
if (needLoad) {
App::Layout = layout;
App::writeConfig();
this->clearWidget();
this->initWidget();
this->initLayout(App::Layout);
//全屏+QWebEngineView控件一起会产生右键菜单无法弹出的BUG,需要上移一个像素
QRect rect = qApp->desktop()->screenGeometry();
#if 1
rect.setY(-1);
rect.setHeight(rect.height());
#else
rect.setX(30);
rect.setY(40);
rect.setWidth(1370);
rect.setHeight(795);
#endif
this->setGeometry(rect);
}
}
void MainWindow::initLayout(const QString &layout)
{
QString file = QString("%1/%2.ini").arg(App::LayoutPath).arg(layout);
QSettings set(file, QSettings::IniFormat);
set.beginGroup("MainWindow");
restoreState(set.value("State").toByteArray());
set.endGroup();
}
//type: 0-新建布局 1-恢复布局 2-保存布局 3-布局另存
void MainWindow::saveLayout(const QString &layout, int type)
{
//如果为空则表示是恢复布局
if (type == 0) {
App::Layout = layout;
this->changeLayout(App::Layout, true);
return;
} else if (type == 1) {
this->changeLayout(App::Layout, true);
return;
}
QString file = QString("%1/%2.ini").arg(App::LayoutPath).arg(layout);
QSettings set(file, QSettings::IniFormat);
set.beginGroup("MainWindow");
set.setValue("State", saveState());
set.endGroup();
App::Layout = layout;
App::writeConfig();
}