2024-12-17 18:53:41 +08:00
|
|
|
#include "mainwindow.h"
|
|
|
|
#include "ui_mainwindow.h"
|
2025-01-03 15:10:55 +08:00
|
|
|
#include <QDebug>
|
|
|
|
#include <QList>
|
2024-12-17 18:53:41 +08:00
|
|
|
|
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
|
|
: QMainWindow(parent)
|
|
|
|
, ui(new Ui::MainWindow)
|
|
|
|
{
|
|
|
|
ui->setupUi(this);
|
2025-01-03 15:10:55 +08:00
|
|
|
|
|
|
|
btnGroup_slot = new QButtonGroup(this);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot3);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot4);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot5);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot6);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot7);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot8);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot9);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot10);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot11);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot12);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot13);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot14);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot15);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot16);
|
|
|
|
btnGroup_slot->addButton(ui->pushButton_slot17);
|
|
|
|
|
|
|
|
createMenu();
|
2024-12-17 18:53:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
|
|
{
|
|
|
|
delete ui;
|
|
|
|
}
|
2025-01-03 15:10:55 +08:00
|
|
|
void MainWindow::createMenu()
|
|
|
|
{
|
|
|
|
QList<QAbstractButton*> buttonList = btnGroup_slot->buttons();
|
|
|
|
for (int i = 0; i < buttonList.count(); i++){
|
|
|
|
slot_type.insert(buttonList[i]->objectName(),"");
|
|
|
|
}
|
|
|
|
for (int i = 0; i < buttonList.count(); i++){
|
|
|
|
if(slot_type[buttonList[i]->objectName()] == "")
|
|
|
|
createMenu(QString("%1").arg(i + 1), (QPushButton*)buttonList[i]);
|
|
|
|
else
|
|
|
|
createMenuSet(QString("%1").arg(i + 1), (QPushButton*)buttonList[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void MainWindow::createMenu(const QString& rootTitle, QPushButton* parent )
|
|
|
|
{
|
|
|
|
// 创建主菜单
|
|
|
|
qDebug() << "createMenu" << parent->objectName() << endl;
|
|
|
|
QMenu *mainMenu = new QMenu(rootTitle, parent);
|
|
|
|
|
|
|
|
// 创建第一层子菜单:/30 振电器模块
|
|
|
|
QMenu *monitors = new QMenu("监视器", mainMenu);
|
|
|
|
QMenu *relays = new QMenu("/30 继电器模块", mainMenu);
|
|
|
|
QMenu *keyphasor = new QMenu("/25 键相模块", mainMenu);
|
|
|
|
|
|
|
|
// 创建第二层子菜单:/40 振动板卡
|
|
|
|
QMenu *proximitor_menu = new QMenu("/40 振动板卡", monitors);
|
|
|
|
QMenu *rpm_menu = new QMenu("/50 转速板卡", monitors);
|
|
|
|
|
|
|
|
// 创建第三层子菜单:/40 单板卡、三冗余板卡
|
|
|
|
QAction *proximitor_1 = proximitor_menu->addAction("/40 单板卡");
|
|
|
|
QAction *proximitor_2 = proximitor_menu->addAction("/40 三冗余板卡");
|
|
|
|
|
|
|
|
QAction *rpm_1 = rpm_menu->addAction("/50 单板卡");
|
|
|
|
|
|
|
|
|
|
|
|
// 创建第二层子菜单:/25 键相模块
|
|
|
|
QAction *keyphasor_1 = keyphasor->addAction("/25 单板卡");
|
|
|
|
QAction *keyphasor_2 = keyphasor->addAction("/25 两板卡");
|
|
|
|
|
|
|
|
// 创建第二层子菜单:/30 继电器模块
|
|
|
|
QAction *relays_1 = relays->addAction("/30 单板卡");
|
|
|
|
QAction *relays_2 = relays->addAction("/30 三冗余板卡");
|
|
|
|
|
|
|
|
// 将子菜单加入上一级菜单
|
|
|
|
monitors->addMenu(proximitor_menu); // 将第二层加入第一层
|
|
|
|
monitors->addMenu(rpm_menu); // 第二层另一个子菜单
|
|
|
|
|
|
|
|
mainMenu->addMenu(monitors); // 将第一层加入主菜单
|
|
|
|
mainMenu->addMenu(relays);
|
|
|
|
mainMenu->addMenu(keyphasor);
|
|
|
|
QAction *reset = mainMenu->addAction("重置模块");
|
|
|
|
parent->setContextMenuPolicy(Qt::CustomContextMenu);
|
|
|
|
connect(parent,&QPushButton::customContextMenuRequested,[=](const QPoint &pos)
|
|
|
|
{
|
|
|
|
qDebug() << pos << endl;
|
|
|
|
mainMenu->exec(QCursor::pos());
|
|
|
|
});
|
|
|
|
// 连接所有菜单项
|
|
|
|
QObject::connect(proximitor_1, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
|
|
|
QObject::connect(proximitor_2, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
|
|
|
QObject::connect(rpm_1, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
|
|
|
QObject::connect(relays_1, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
|
|
|
QObject::connect(relays_2, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
|
|
|
QObject::connect(keyphasor_1, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
|
|
|
QObject::connect(keyphasor_2, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
|
|
|
QObject::connect(reset, &QAction::triggered,this, &MainWindow::onMenuActionTriggered);
|
|
|
|
}
|
|
|
|
void MainWindow::createMenuSet(const QString& rootTitle, QPushButton* parent )
|
|
|
|
{
|
|
|
|
// 创建主菜单
|
|
|
|
qDebug() << "createMenu" << parent->objectName() << endl;
|
|
|
|
QMenu *mainMenu = new QMenu(rootTitle, parent);
|
|
|
|
|
|
|
|
QAction *option = mainMenu->addAction("通道配置…");
|
|
|
|
QAction *set_points = mainMenu->addAction("触发配置…");
|
|
|
|
QAction *point_names = mainMenu->addAction("测点名称");
|
|
|
|
}
|
|
|
|
|
|
|
|
// 清除菜单中所有动作的属性
|
|
|
|
void MainWindow::clearMenuProperties(QMenu* menu)
|
|
|
|
{
|
|
|
|
// 遍历菜单的所有动作
|
|
|
|
if (!menu) {
|
|
|
|
qWarning() << "菜单为空,无法清除属性!";
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 遍历菜单的所有动作
|
|
|
|
for (QAction* action : menu->actions()) {
|
|
|
|
if (!action) continue;
|
|
|
|
|
|
|
|
// 检查是否有子菜单
|
|
|
|
if (QMenu* subMenu = action->menu()) {
|
|
|
|
clearMenuProperties(subMenu); // 递归处理子菜单
|
|
|
|
}
|
|
|
|
|
|
|
|
// 清除动作的属性
|
|
|
|
action->setProperty("customProperty", QVariant());
|
|
|
|
qDebug() << "清除了属性,动作:" << action->text();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainWindow::onMenuActionTriggered()
|
|
|
|
{
|
|
|
|
qDebug() << "onMenuActionTriggered()" << endl;
|
|
|
|
QAction *action = qobject_cast<QAction*>(sender());
|
|
|
|
if (action) {
|
|
|
|
// 获取触发动作的父菜单
|
|
|
|
QMenu *menu = qobject_cast<QMenu*>(action->parent());
|
|
|
|
// 遍历所有父菜单,直到找到按钮
|
|
|
|
while (menu) {
|
|
|
|
QPushButton *button = qobject_cast<QPushButton*>(menu->parent());
|
|
|
|
if (button) {
|
|
|
|
qDebug() << "子菜单项被点击,所属按钮:" << button->objectName();
|
|
|
|
button->setText(action->text());
|
|
|
|
slot_type[button->objectName()] = action->text();
|
|
|
|
QMenu* menu = button->menu();
|
|
|
|
if (!menu) {
|
|
|
|
qWarning() << "菜单为空,无法清除属性!";
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
clearMenuProperties(button->menu());
|
|
|
|
createMenu();
|
|
|
|
break; // 找到按钮后,跳出循环
|
|
|
|
}
|
|
|
|
// 如果没有找到按钮,继续向上查找
|
|
|
|
menu = qobject_cast<QMenu*>(menu->parent());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainWindow::OnButtonGroup(QAbstractButton * slot_btn, bool checked)
|
|
|
|
{
|
|
|
|
if(slot_btn != NULL)
|
|
|
|
{
|
|
|
|
qDebug() << slot_btn->objectName();
|
|
|
|
qDebug() << checked;
|
|
|
|
QString str;
|
|
|
|
QList<QAbstractButton*> buttonList = btnGroup_slot->buttons();
|
|
|
|
for (int i = 0; i < buttonList.count(); i++){
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainWindow::on_pushButton_slot_clicked()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::on_pushButton_chan_clicked()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::on_pushButton_alarm_clicked()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::on_pushButton_point_name_clicked()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
2024-12-17 18:53:41 +08:00
|
|
|
|