#include "ToolsUI.h" #include "ui_ToolsUI.h" //消息通过广播和监听处理 ToolsUI::ToolsUI(QWidget *parent) : QWidget(parent), ui(new Ui::ToolsUI) { ui->setupUi(this); //load qss QFile file(":/qss/ToolsUI.qss"); file.open(QFile::ReadOnly); QTextStream filetext(&file); QString stylesheet = filetext.readAll(); this->setStyleSheet(stylesheet); file.close(); //绑定按键和界面 int w = 120; int h = 50; ui->scrollArea->setFixedWidth(w); ui->pushButton_ShowExtern->setFixedSize(w,h); index0 = new Tools_Index0(); index1 = new Tools_Index1(); index2 = new Tools_Index2(); index3 = new Tools_Index3(); index4 = new tools_Index4(); command = new CommandBox(); senser = new Senser(); remotecontrol = new RemoteControl(); ecu = new ECU(); ins = new INS(); gear = new landinggear(); install(index0 ,tr("Inspector")); install(index1 ,tr("Log")); install(index2 ,tr("Replay")); install(index3 ,tr("Terminal")); install(index4 ,tr("Servos")); install(command ,tr("CommandBox")); install(senser ,tr("Senser")); install(remotecontrol,tr("RC")); install(ecu ,tr("ECU")); install(ins ,tr("INS") ); install(gear ,tr("Gear") ); connect(this,SIGNAL(IndexChanged(int)), this,SLOT(onTabIndexChanged(int))); CurrentIndex = 0; emit IndexChanged(CurrentIndex); foreach (QPushButton *b, btnList) { if(btnList.key(b) == 0) { setPushButtonState(b,state::Selected); } else { setPushButtonState(b,state::unSelected); } } } ToolsUI::~ToolsUI() { foreach (QWidget *w, ToolsList) { if(w) { w->deleteLater(); w = nullptr; } } delete ui; } void ToolsUI::resizeEvent(QResizeEvent *event) { Q_UNUSED(event) foreach (QWidget *w, ToolsList) { if(w->parent()) { w->setGeometry(0,0,ui->frame->geometry().width(),ui->frame->geometry().height()); } } update(); } void ToolsUI::setPushButtonState(QWidget *w,state s) { w->setProperty("state",s); w->style()->unpolish(w); w->style()->polish(w); } void ToolsUI::install(ToolsWidget *widget, QString name) { if(!ToolsList.values().contains(widget)) { int h = 50; int w = 120; QPushButton *btn = new QPushButton(); btn->setText(name); btn->setFixedSize(w,h); btnList.insert(ToolsList.size(),btn); connect(btn,&QPushButton::clicked, this,&ToolsUI::btnClicked); ui->gridLayout_Indexs->addWidget(btn,ToolsList.size(),1); widget->setParent(ui->frame); widget->setWindowTitle(name); widget->setIcon(widget->Icon()); widget->hide(); ToolsList.insert(ToolsList.size(),widget); //接收到信号,每个界面自己解析,获取自己想要的信息 connect(this,&ToolsUI::recieveData, widget,&ToolsWidget::recieveData); } else { qDebug() << "重复出现" << name; } } void ToolsUI::btnClicked() { QObject *obj = sender(); QPushButton *btn = qobject_cast(obj); if(btn) { int key = btnList.key(btn); CurrentIndex = key; setPushButtonState(btn,state::Selected); foreach (QPushButton *b, btnList) { if(b != btn) { setPushButtonState(b,state::unSelected); } } emit IndexChanged(CurrentIndex); } } void ToolsUI::onTabIndexChanged(const int &index)//界面选择管理 { foreach (int key, ToolsList.keys()) { ToolsWidget *w = ToolsList.value(key); if(index == key) { if(w->parent()) { w->show(); } else { w->showNormal(); w->activateWindow(); } } else { if(w->parent()) { w->hide(); } } } } void ToolsUI::on_pushButton_ShowExtern_clicked() { foreach (ToolsWidget *w, ToolsList) { if(ToolsList.key(w,-1) == CurrentIndex) { if(w->parent()) { w->setFloat(); } } } }