#include "ChartsAndCamerasWnd.h" #include "ui_ChartsAndCamerasWnd.h" #include #include #include #include #include "chartline.h" #include #include #include #include "CameraMaterialGroupWnd/CameraImage/CameraImageHandler.h" #include #include #include #include #include ChartsAndCamerasWnd::ChartsAndCamerasWnd(QWidget* parent) : JOriginalMainWnd(parent), ui(new Ui::ChartsAndCamerasWnd), chartLine(new ChartLine(this)), chartLine1(new ChartLine(this)), chartLine2(new ChartLine(this)) { ui->setupUi(this); // 设置 ChartLine 的位置和大小 chartLine->setParent(ui->Leftwidget); chartLine->setGeometry(0, 0, 560, 280); chartLine->setChartLabels("Combined Placement", "Number of Samples", "Device Align"); // 设置 ChartLine1 的位置和大小 chartLine1->setParent(ui->Leftwidget); chartLine1->setGeometry(0, 245, 560, 280); chartLine1->setChartLabels("Y placement", "Number of samples", "Y device align"); // 设置 ChartLine2 的位置和大小 chartLine2->setParent(ui->Leftwidget); chartLine2->setGeometry(0, 490, 560, 280); chartLine2->setChartLabels("Theta placement", "Number of samples", "Theta device align"); // 初始化系列信息 initializeSeriesInfo(); // 连接所有复选框的 clicked 信号到通用槽函数 QList checkBoxes = { ui->GreenDiamondcheckBox, ui->YellowDiamondcheckBox, ui->BlackDiamondcheckBox, ui->BlueDiamondcheckBox, ui->BlueHorizontalLinecheckBox, ui->BlueVerticalBarcheckBox, ui->GreenVerticalBarcheckBox, ui->PurpleVerticalBarcheckBox, ui->RedDiamondcheckBox, ui->RedHorizontalLinecheckBox, ui->WhiteVerticalBarcheckBox }; connect(ui->viewwidgetgroup, &ControlOperationPage::send_ComboBox_singal, this, &ChartsAndCamerasWnd::HandleComboxchange); for (QCheckBox* cb : checkBoxes) { cb->setCheckable(true); //connect(cb, &QCheckBox::clicked, this, &ChartsAndCamerasWnd::on_CheckBox_clicked); } //isEnable = false; // initFrom(); isShow = true; } ChartsAndCamerasWnd::~ChartsAndCamerasWnd() { m_pMainCameraBind = nullptr; delete ui; UnCameraBind(); } void ChartsAndCamerasWnd::initializeSeriesInfo() { // 初始化系列信息,使用 DataSeries 结构体 m_seriesMap["GreenDiamond"] = DataSeries{ "GreenDiamond", QColor("#00FF00"), // 绿色 QPixmap(":/images/Participation display/GreenDiamond.png"), QList() // 初始为空 }; m_seriesMap["YellowDiamond"] = DataSeries{ "YellowDiamond", QColor("#FFFF00"), // 黄色 QPixmap(":/images/Participation display/YellowDiamond.png"), QList() }; m_seriesMap["BlackDiamond"] = DataSeries{ "BlackDiamond", QColor("#000000"), // 黑色 QPixmap(":/images/Participation display/BlackDiamond.png"), QList() }; m_seriesMap["BlueDiamond"] = DataSeries{ "BlueDiamond", QColor("#0000FF"), // 蓝色 QPixmap(":/images/Participation display/BlueDiamond.png"), QList() }; m_seriesMap["BlueHorizontalLine"] = DataSeries{ "BlueHorizontalLine", QColor("#0000FF"), QPixmap(":/images/Participation display/Blue_horizontal_line.png"), QList() }; m_seriesMap["BlueVerticalBar"] = DataSeries{ "BlueVerticalBar", QColor("#0000FF"), QPixmap(":/images/Participation display/Blue_vertical_bar.png"), QList() }; m_seriesMap["GreenVerticalBar"] = DataSeries{ "GreenVerticalBar", QColor("#00FF00"), QPixmap(":/images/Participation display/Green_vertical_bar.png"), QList() }; m_seriesMap["PurpleVerticalBar"] = DataSeries{ "PurpleVerticalBar", QColor("#800080"), QPixmap(":/images/Participation display/Purple_vertical_bar.png"), QList() }; m_seriesMap["RedDiamond"] = DataSeries{ "RedDiamond", QColor("#FF0000"), // 红色 QPixmap(":/images/Participation display/RedDiamond.png"), QList() }; m_seriesMap["RedHorizontalLine"] = DataSeries{ "RedHorizontalLine", QColor("#FF0000"), QPixmap(":/images/Participation display/Red_horizontal_line.png"), QList() }; m_seriesMap["WhiteVerticalBar"] = DataSeries{ "WhiteVerticalBar", QColor("#FFFFFF"), // 白色 QPixmap(":/images/Participation display/White_vertical_bar.png"), QList() }; } #if 0 void ChartsAndCamerasWnd::on_CheckBox_clicked() { // 获取发送信号的复选框 QCheckBox* checkBox = qobject_cast(sender()); if (!checkBox) return; QString checkBoxName = checkBox->objectName(); QString seriesName = checkBoxName; // 移除末尾的 "checkBox" if (seriesName.endsWith("checkBox")) { seriesName.chop(QString("checkBox").length()); } else if (seriesName.endsWith("CheckBox")) { seriesName.chop(QString("CheckBox").length()); } qDebug() << "Checkbox clicked:" << seriesName << (checkBox->isChecked() ? "Checked" : "Unchecked"); if (!m_seriesMap.contains(seriesName)) { qDebug() << "No series info for:" << seriesName; return; } DataSeries& seriesInfo = m_seriesMap[seriesName]; if (checkBox->isChecked()) { // 生成随机数据 QList data; for (int i = 0; i <= 40; i += 4) { data.append(QPointF(i, QRandomGenerator::global()->bounded(-30, 80))); } seriesInfo.data = data; // 添加到 ChartLine 实例 chartLine->addDataSeries(seriesInfo); chartLine1->addDataSeries(seriesInfo); chartLine2->addDataSeries(seriesInfo); qDebug() << "Added series:" << seriesName; } else { // 从 ChartLine 实例中移除 chartLine->removeDataSeries(seriesName); chartLine1->removeDataSeries(seriesName); chartLine2->removeDataSeries(seriesName); qDebug() << "Removed series:" << seriesName; } } #endif void ChartsAndCamerasWnd::initFrom() { QWidget* viewport = ui->scrollArea->viewport(); QWidget* container = new QWidget(viewport); QHBoxLayout* layout = new QHBoxLayout(container); layout->setSpacing(16); // 设置Group之间的间隔距离 layout->setMargin(0); //QList numbers = { 1, 2, 3, 4, 5, 6, 7, 8 }; int nSize = 0; if (m_pMainCameraBind != nullptr) { nSize = m_pMainCameraBind->m_vecCamera.size(); if (nSize == 0) // 针对获取不到的情况 { nSize = 5; //JMessageTip::Message_warning("a"); } QList numbers; for (int i = 1; i <= nSize; i++) { numbers.push_back(i); } for (int i = 0; i < numbers.size(); ++i) { int num = numbers[i]; CameraInfo test; test.iCameraId = i; test.name = ("camera" + QString::number(i)).toStdString(); test.eType = MATERIAL_WAFER; CameraImageHandler* manager = new CameraImageHandler(num, test); Group* widget = manager->getGroup(); //connect(widget,&Group::send_button_Signal,this,&ChartsAndCamerasWnd::showAndHide); if (widget != nullptr) { CameraConnectUpdateImageFun(i, widget); connect(widget, &Group::sendUpdateGroupState, this, &ChartsAndCamerasWnd::checkSettings); connect(widget, &Group::send_ComboBox_singal, this, &ChartsAndCamerasWnd::GetGroupComboxChanged); layout->addWidget(widget); m_allGroup.append(widget); } if (manager->getWafer()) { waferMap.insert(num, manager->getWafer()); } if (manager->getWaffle()) { waffleMap.insert(num, manager->getWaffle()); } if (manager->getMaterialBox()) { materialBoxMap.insert(num, manager->getMaterialBox()); } if (manager->getBond()) { bondMap.insert(num, manager->getBond()); } if (!manager->getFileList().isEmpty()) { m_mapFileListMap.insert(num, manager->getFileList()); } delete manager; } // 设置控件的最小高度和最大宽度 int minHeight = 162; int maxWidth = 244; int num = -16; for (Group* w : m_allGroup) { w->setMinimumHeight(minHeight); w->setMaximumWidth(maxWidth); num = num + 260; } container->setMinimumSize(num, 162); container->setLayout(layout); ui->scrollArea->setWidget(container); ui->scrollArea->resize(508, 177); initWidget(); } } void ChartsAndCamerasWnd::checkSettings(int groupId, int index) { if (groupId != lastGroupId || index != lastIndex) { GetCurrentSelectSlots(groupId, index); lastGroupId = groupId; lastIndex = index; saveInfoOfLast(); } } void ChartsAndCamerasWnd::updateMaterialWidget(int materialWndType, int groupId) { switch (materialWndType) { case 1: ui->viewwidgetgroup->setWafer(waferMap.value(groupId)); break; case 2: ui->viewwidgetgroup->setWaffle(waffleMap.value(groupId)); break; case 3: ui->viewwidgetgroup->setMaterialBox(materialBoxMap.value(groupId)); break; case 4: ui->viewwidgetgroup->setBond(bondMap.value(groupId)); break; } } void ChartsAndCamerasWnd::InitMainCameraBind(CameraBind* pCameraBind) { m_pMainCameraBind = pCameraBind; initFrom(); } void ChartsAndCamerasWnd::UnCameraBind() { for (size_t i = 0; i < m_allGroup.size(); i++) { CameraConnectUpdateImageFun(i, m_allGroup[i], true); } //判断退出前的窗口是否是绑定相机 if (m_veCurrentSelectGroup.isBond == true) { //解绑 disconnect(m_veCurrentSelectGroup.pSelectGroup, &Group::SetUpDataImageShowSig, this, &ChartsAndCamerasWnd::GetGroupImageShowSignals); } } void ChartsAndCamerasWnd::UpdateCameraDisplay0(int iCameraId, JVision::ImageInfo imageData) { QImage image(imageData.data, imageData.width, imageData.height, QImage::Format_Indexed8); emit UpDataImageShowSignals0(QPixmap::fromImage(image)); } void ChartsAndCamerasWnd::UpdateCameraDisplay1(int iCameraId, JVision::ImageInfo imageData) { QImage image(imageData.data, imageData.width, imageData.height, QImage::Format_Indexed8); emit UpDataImageShowSignals1(QPixmap::fromImage(image)); } void ChartsAndCamerasWnd::UpdateCameraDisplay2(int iCameraId, JVision::ImageInfo imageData) { QImage image(imageData.data, imageData.width, imageData.height, QImage::Format_Indexed8); emit UpDataImageShowSignals2(QPixmap::fromImage(image)); } void ChartsAndCamerasWnd::UpdateCameraDisplay3(int iCameraId, JVision::ImageInfo imageData) { QImage image(imageData.data, imageData.width, imageData.height, QImage::Format_Indexed8); emit UpDataImageShowSignals3(QPixmap::fromImage(image)); } void ChartsAndCamerasWnd::UpdateCameraDisplay4(int iCameraId, JVision::ImageInfo imageData) { QImage image(imageData.data, imageData.width, imageData.height, QImage::Format_Indexed8); emit UpDataImageShowSignals4(QPixmap::fromImage(image)); } void ChartsAndCamerasWnd::CameraConnectUpdateImageFun(int nIndex, Group* widget, bool isUnCameraBind /*= false*/) { auto BinCamerasImage = [&](void (ChartsAndCamerasWnd::* pCamerasImage)(const QPixmap& imageData)) { if (isUnCameraBind) { //disconnect(widget, &Group::SetCurrentSelectSig, this, &ChartsAndCamerasWnd::GetCurrentSelectSlots); disconnect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots); } else { //共用函数 //connect(widget, &Group::sendUpdateGroupState, this, &ChartsAndCamerasWnd::checkSettings); connect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots); } }; if (nIndex == 0) { BinCamerasImage(&ChartsAndCamerasWnd::UpDataImageShowSignals0); } else if (nIndex == 1) { BinCamerasImage(&ChartsAndCamerasWnd::UpDataImageShowSignals1); } else if (nIndex == 2) { BinCamerasImage(&ChartsAndCamerasWnd::UpDataImageShowSignals2); } else if (nIndex == 3) { BinCamerasImage(&ChartsAndCamerasWnd::UpDataImageShowSignals3); } else if (nIndex == 4) { BinCamerasImage(&ChartsAndCamerasWnd::UpDataImageShowSignals4); } } void ChartsAndCamerasWnd::wheelEvent(QWheelEvent* event) { //mousePos = ui->viewwidgetgroup->getOperatewidget()->mapFromGlobal(event->globalPos()); //if (ui->viewwidgetgroup->getOperatewidget()->rect().contains(ui->viewwidgetgroup->getOperatewidget()->mapFromGlobal(event->globalPos()))) { // if (event->angleDelta().y() > 0) { // ui->viewwidgetgroup->updateScale(scaleFactor * 1.1); // 放大 // } else { // ui->viewwidgetgroup->updateScale(scaleFactor * 0.9); // 缩小 // } //} //if (ui->scrollArea->rect().contains(ui->scrollArea->mapFromGlobal(event->globalPos()))) { // // 获取 QScrollArea 的横向滚动条 // QScrollBar *scrollBar = ui->scrollArea->horizontalScrollBar(); // // 根据滚轮滚动方向改变滚动条的值 // if (event->angleDelta().y() > 0) { // scrollBar->setValue(scrollBar->value() - 50); // } else { // scrollBar->setValue(scrollBar->value() + 50); // } //} QMainWindow::wheelEvent(event); } void ChartsAndCamerasWnd::showEvent(QShowEvent* event) { QMainWindow::showEvent(event); // loadSettings(); // initFrom(); } void ChartsAndCamerasWnd::hideEvent(QHideEvent* event) { QMainWindow::hideEvent(event); } void ChartsAndCamerasWnd::GetGroupImageShowSignals(const QPixmap& imageData) { QSize size = ui->viewwidgetgroup->getOperatewidget()->size(); QPixmap scaledPixmap = imageData.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation); ui->viewwidgetgroup->setScaleFactorSize(scaledPixmap); // m_lastRightPixmap = imageData; } void ChartsAndCamerasWnd::BindImageOrMaterial(int index) { if (index == m_nImageIndex) { m_veCurrentSelectGroup.isBond = true; connect(m_veCurrentSelectGroup.pSelectGroup, &Group::SetUpDataImageShowSig, this, &ChartsAndCamerasWnd::GetGroupImageShowSignals); UpdataLightJoystickSwitchPage(m_veCurrentSelectGroup.pSelectGroup->m_nGroupId, true); } else { QSettings settings("YourOrganization", "YourApplication"); settings.beginGroup(QString::number(m_veCurrentSelectGroup.pSelectGroup->m_nGroupId)); int materialWndType = settings.value("MaterialWndType").toInt(); settings.endGroup(); m_veCurrentSelectGroup.isBond = false; UpdataLightJoystickSwitchPage(m_veCurrentSelectGroup.pSelectGroup->m_nGroupId, false); updateMaterialWidget(materialWndType, m_veCurrentSelectGroup.pSelectGroup->m_nGroupId); } } void ChartsAndCamerasWnd::initWidget() { //初始化当前页面的信息 QSettings settings("YourOrganization", "YourApplication"); lastIndex = settings.value("ChartLastIndex", 1).toInt(); lastGroupId = settings.value("ChartLastGroupId", 1).toInt(); //处理各种情况的初始化 if (m_pMainCameraBind == nullptr || m_allGroup.size() == 0) { return; } //当lastGroupId大于m_allGroup.size()时,初始化lastGroupId为1 if (m_allGroup.size() < lastGroupId) { lastGroupId = 1; lastIndex = 1; m_veCurrentSelectGroup.isInitialed = true; m_veCurrentSelectGroup.pSelectGroup = m_allGroup.at(lastGroupId - 1); m_veCurrentSelectGroup.pSelectGroup->initBorderStyle(lastIndex, 1); //初始化下拉框内容同步小窗口索引 int currentComboBoxIndex = m_veCurrentSelectGroup.pSelectGroup->getCurrentComboBoxIndex(); ui->viewwidgetgroup->setEnableControls(true); ui->viewwidgetgroup->setComboBox(m_mapFileListMap[m_veCurrentSelectGroup.pSelectGroup->m_nGroupId], currentComboBoxIndex); BindImageOrMaterial(m_nImageIndex); BindImageOrMaterial(m_nImageIndex); } else { } m_veCurrentSelectGroup.isInitialed = true; m_veCurrentSelectGroup.pSelectGroup = m_allGroup.at(lastGroupId - 1); m_veCurrentSelectGroup.pSelectGroup->initBorderStyle(lastIndex, 1); //初始化下拉框内容同步小窗口索引 int currentComboBoxIndex = m_veCurrentSelectGroup.pSelectGroup->getCurrentComboBoxIndex(); ui->viewwidgetgroup->setComboBox(m_mapFileListMap[m_veCurrentSelectGroup.pSelectGroup->m_nGroupId], currentComboBoxIndex); if (lastIndex == 1) { ui->viewwidgetgroup->setEnableControls(true); BindImageOrMaterial(m_nImageIndex); } else { ui->viewwidgetgroup->setEnableControls(false); BindImageOrMaterial(m_nMaterialIndex); } } void ChartsAndCamerasWnd::saveInfoOfLast() { QSettings settings("YourOrganization", "YourApplication"); settings.setValue("ChartLastIndex", lastIndex); settings.setValue("ChartLastGroupId", lastGroupId); } void ChartsAndCamerasWnd::GetCurrentSelectSlots(int groupId, int nIndex) { int nOnClickGroupId = groupId - 1; if (m_pMainCameraBind == nullptr || m_allGroup.size() < groupId) { return; } //判断更新前的窗口是否是绑定相机 if (m_veCurrentSelectGroup.isBond == true) { //解绑 disconnect(m_veCurrentSelectGroup.pSelectGroup, &Group::SetUpDataImageShowSig, this, &ChartsAndCamerasWnd::GetGroupImageShowSignals); } m_veCurrentSelectGroup.pSelectGroup = m_allGroup.at(nOnClickGroupId); //判断index是相机还是物料 if (nIndex == 2) { ui->viewwidgetgroup->setEnableControls(false); BindImageOrMaterial(m_nMaterialIndex); } else if (nIndex == 1) { //更新下拉框内容同步小窗口索引 int currentComboBoxIndex = m_veCurrentSelectGroup.pSelectGroup->getCurrentComboBoxIndex(); ui->viewwidgetgroup->setEnableControls(true); ui->viewwidgetgroup->setComboBox(m_mapFileListMap[m_veCurrentSelectGroup.pSelectGroup->m_nGroupId], currentComboBoxIndex); BindImageOrMaterial(m_nImageIndex); QPixmap pixmap = ui->viewwidgetgroup->getCurrentComboBoxPixmap(currentComboBoxIndex); GetGroupImageShowSignals(pixmap); } } void ChartsAndCamerasWnd::UpdataLightJoystickSwitchPage(int groupId, bool isShow) { auto Fun = [&](Group* pGroup, LightJoystickSwitchPage* p, ControlOperationPage* pContPage, bool bShow) { p->UpdatemPageGroup(pGroup); p->InitMainCameraBind(m_pMainCameraBind, bShow); p->HideOrShowPage(bShow); if (bShow) { pContPage->UpDateCameraBind(m_pMainCameraBind); } else { pContPage->setSwitchJoystickButEnable(bShow); } }; disconnect(ui->viewwidgetgroup, &ControlOperationPage::SendModuleTypeSignals, ui->control, &LightJoystickSwitchPage::GetModuleTypeSlots); Group* currGroup = m_allGroup.at(groupId - 1); Fun(currGroup, ui->control, ui->viewwidgetgroup, isShow); connect(ui->viewwidgetgroup, &ControlOperationPage::SendModuleTypeSignals, ui->control, &LightJoystickSwitchPage::GetModuleTypeSlots); } void ChartsAndCamerasWnd::GetGroupComboxChanged(int groupId, int comboxIndex) { m_allGroup.at(groupId - 1); if (comboxIndex == 0) { CameraConnectUpdateImageFun(groupId - 1, m_allGroup.at(groupId - 1), false); } else { CameraConnectUpdateImageFun(groupId - 1, m_allGroup.at(groupId - 1), true); } m_allGroup.at(groupId - 1)->setCurrentCombox(comboxIndex); if (groupId == m_veCurrentSelectGroup.pSelectGroup->m_nGroupId && lastIndex == 1) { if (comboxIndex != 0) {//图片 QPixmap updatePixmap = ui->viewwidgetgroup->getCurrentComboBoxPixmap(comboxIndex); m_veCurrentSelectGroup.pSelectGroup->UpDataImageShowSlots(updatePixmap); } } } void ChartsAndCamerasWnd::HandleComboxchange(int index) { if (index == 0) { CameraConnectUpdateImageFun(m_veCurrentSelectGroup.pSelectGroup->m_nGroupId - 1, m_allGroup.at(m_veCurrentSelectGroup.pSelectGroup->m_nGroupId - 1), false); } else { CameraConnectUpdateImageFun(m_veCurrentSelectGroup.pSelectGroup->m_nGroupId - 1, m_allGroup.at(m_veCurrentSelectGroup.pSelectGroup->m_nGroupId - 1), true); QPixmap updatePixmap = ui->viewwidgetgroup->getCurrentComboBoxPixmap(index); m_veCurrentSelectGroup.pSelectGroup->UpDataImageShowSlots(updatePixmap); } }