diff --git a/applications/emsConfigurer/emscfgres.qrc b/applications/emsConfigurer/emscfgres.qrc index f872e79..8fe5920 100644 --- a/applications/emsConfigurer/emscfgres.qrc +++ b/applications/emsConfigurer/emscfgres.qrc @@ -3,5 +3,14 @@ images/emscfg-main.ico images/hj-net.png images/icon.png + images/PageAir.png + images/PageBattery.png + images/PageFan.png + images/PagePower.png + images/PagePV.png + images/PageSensor.png + images/PageSetting.png + images/PageSwitch.png + images/PageUps.png diff --git a/applications/emsConfigurer/images/PageAir.png b/applications/emsConfigurer/images/PageAir.png new file mode 100644 index 0000000..6ef7023 Binary files /dev/null and b/applications/emsConfigurer/images/PageAir.png differ diff --git a/applications/emsConfigurer/images/PageBattery.png b/applications/emsConfigurer/images/PageBattery.png new file mode 100644 index 0000000..3484ae6 Binary files /dev/null and b/applications/emsConfigurer/images/PageBattery.png differ diff --git a/applications/emsConfigurer/images/PageFan.png b/applications/emsConfigurer/images/PageFan.png new file mode 100644 index 0000000..30d5176 Binary files /dev/null and b/applications/emsConfigurer/images/PageFan.png differ diff --git a/applications/emsConfigurer/images/PagePV.png b/applications/emsConfigurer/images/PagePV.png new file mode 100644 index 0000000..95735a1 Binary files /dev/null and b/applications/emsConfigurer/images/PagePV.png differ diff --git a/applications/emsConfigurer/images/PagePower.png b/applications/emsConfigurer/images/PagePower.png new file mode 100644 index 0000000..3e71b0f Binary files /dev/null and b/applications/emsConfigurer/images/PagePower.png differ diff --git a/applications/emsConfigurer/images/PageSensor.png b/applications/emsConfigurer/images/PageSensor.png new file mode 100644 index 0000000..6f0b897 Binary files /dev/null and b/applications/emsConfigurer/images/PageSensor.png differ diff --git a/applications/emsConfigurer/images/PageSetting.png b/applications/emsConfigurer/images/PageSetting.png new file mode 100644 index 0000000..e1671f6 Binary files /dev/null and b/applications/emsConfigurer/images/PageSetting.png differ diff --git a/applications/emsConfigurer/images/PageSwitch.png b/applications/emsConfigurer/images/PageSwitch.png new file mode 100644 index 0000000..d8bc768 Binary files /dev/null and b/applications/emsConfigurer/images/PageSwitch.png differ diff --git a/applications/emsConfigurer/images/PageUps.png b/applications/emsConfigurer/images/PageUps.png new file mode 100644 index 0000000..30bc5d5 Binary files /dev/null and b/applications/emsConfigurer/images/PageUps.png differ diff --git a/applications/emsConfigurer/maindialog.cpp b/applications/emsConfigurer/maindialog.cpp index 0eb97d8..11ce118 100644 --- a/applications/emsConfigurer/maindialog.cpp +++ b/applications/emsConfigurer/maindialog.cpp @@ -1,14 +1,216 @@ -#include "maindialog.h" +#include "maindialog.h" #include "ui_maindialog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include MainDialog::MainDialog(QWidget *parent) : - QDialog(parent), + QMainWindow (parent), ui(new Ui::MainDialog) { - ui->setupUi(this); + //ui->setupUi(this); + + this->setWindowIcon(QIcon(":/images/icon.png")); + + InitializeUI(); + + connect(m_pDeviceListWidget, &QListWidget::currentItemChanged, this, &MainDialog::changePage); + + // Load the window state + loadWindowState(); } MainDialog::~MainDialog() { delete ui; } + +void MainDialog::InitializeUI() +{ + // Create central widget and layout + QWidget *centralWidget = new QWidget(this); + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + + //Create toolbar + CreateToolbar(); + + // Set up the QListWidget + m_pDeviceListWidget = new QListWidget(this); + + m_pDeviceListWidget->setStyleSheet("background-color:transparent"); + m_pDeviceListWidget->setViewMode(QListView::IconMode); + m_pDeviceListWidget->setIconSize(QSize(70, 70)); + m_pDeviceListWidget->setGridSize(QSize(145, 100)); // item 的大小 + m_pDeviceListWidget->setMovement(QListView::Static); + + m_pDeviceListWidget->setMaximumWidth(170); + m_pDeviceListWidget->setMinimumWidth(170); // Set minimum width + + m_pDeviceListWidget->setResizeMode(QListView::Fixed); + + m_pDeviceListWidget->setSpacing(25); + //m_pDeviceListWidget->setUniformItemSizes(true); // 所有的 item 一样大 + m_pDeviceListWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); + + + CreateIcon(QIcon(":/images/PagePower.png"),tr("Power")); + CreateIcon(QIcon(":/images/PageBattery.png"),tr("Battery")); + CreateIcon(QIcon(":/images/PageSwitch.png"),tr("Switch")); + CreateIcon(QIcon(":/images/PageAir.png"),tr("Air")); + CreateIcon(QIcon(":/images/PageFan.png"),tr("Fan")); + CreateIcon(QIcon(":/images/PageSensor.png"),tr("Sensor")); + + // Set up the QStackedWidget + CreateTablePage(); + + // Set up the QSplitter to manage the resizing of QListWidget and QStackedWidget + QSplitter *splitter = new QSplitter(Qt::Horizontal, this); + splitter->addWidget(m_pDeviceListWidget); + splitter->addWidget(m_pDevicestackedWidget); + splitter->setSizes(QList({200, 600})); // Set initial sizes (200 for QListWidget, 600 for QStackedWidget) + + // Disable splitter dragging + splitter->setChildrenCollapsible(false); + + // Set up layout + mainLayout->addWidget(m_pMainToolBar); + mainLayout->addWidget(splitter); + centralWidget->setLayout(mainLayout); + + // Set central widget + setCentralWidget(centralWidget); + + // Set initial size of the dialog + setWindowTitle(tr("EMS Configurer ")); + + //resize(800, 600); + + setMinimumSize(1024, 768); +} + + +void MainDialog::CreateToolbar() +{ + m_pMainToolBar = new QToolBar(this); + m_pMainToolBar->setIconSize(QSize(48, 48)); + + + // Create actions for the toolbar + QAction *action1 = new QAction(QIcon(":/images/icon.png"), "Button 1", this); + QAction *action2 = new QAction(QIcon(":/images/icon.png"), "Button 2", this); + QAction *action3 = new QAction(QIcon(":/images/icon.png"), "About...", this); + + // Add actions to the toolbar + m_pMainToolBar->addAction(action1); + m_pMainToolBar->addAction(action2); + m_pMainToolBar->addAction(action3); + + // Connect actions to slots + connect(action1, &QAction::triggered, this, &MainDialog::onToolButton1Clicked); + connect(action2, &QAction::triggered, this, &MainDialog::onToolButton1Clicked); + connect(action3, &QAction::triggered, this, &MainDialog::onAboutButtonClicked); + +} + +void MainDialog::CreateTablePage() +{ + m_pDevicestackedWidget = new QStackedWidget(this); + + QVBoxLayout *stackedWidgetLayout = new QVBoxLayout; + m_pDevicestackedWidget->setLayout(stackedWidgetLayout); + + // Create and set up QTableView + QTableView *tableView = new QTableView(this); + + // Create and set up a model for the table view + QStandardItemModel *model = new QStandardItemModel(4, 3, this); // 4 rows, 3 columns + model->setHorizontalHeaderLabels(QStringList() << "Column 1" << "Column 2" << "Column 3"); + + // Fill the model with data + for (int row = 0; row < 4; ++row) + { + for (int col = 0; col < 3; ++col) + { + QStandardItem *item = new QStandardItem(QString("Item %1-%2").arg(row).arg(col)); + model->setItem(row, col, item); + } + } + + tableView->setModel(model); + + m_pDevicestackedWidget->addWidget(tableView); // Add QTableView as a page + + + m_pDevicestackedWidget->addWidget(new QPushButton("Page 2")); + m_pDevicestackedWidget->addWidget(new QPushButton("Page 3")); + m_pDevicestackedWidget->addWidget(new QPushButton("Page 4")); + m_pDevicestackedWidget->addWidget(new QPushButton("Page 5")); + m_pDevicestackedWidget->addWidget(new QPushButton("Page 6")); + + + + +} +void MainDialog::CreateIcon(const QIcon& icon,QString text) +{ + QListWidgetItem *itemButton = new QListWidgetItem(m_pDeviceListWidget); + itemButton->setIcon(icon); + itemButton->setText(text); + itemButton->setTextAlignment(Qt::AlignHCenter); + itemButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +} + +void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) +{ + if (!current) + current = previous; + + m_pDevicestackedWidget->setCurrentIndex(m_pDeviceListWidget->row(current)); +} + +void MainDialog::closeEvent(QCloseEvent *event) +{ + // Save the window state + saveWindowState(); + QMainWindow::closeEvent(event); +} + +void MainDialog::saveWindowState() +{ + QSettings settings("HJ-NET", "EMSCFG"); + settings.setValue("geometry", saveGeometry()); + settings.setValue("windowState", saveState()); +} + +void MainDialog::loadWindowState() +{ + QSettings settings("HJ-NET", "EMSCFG"); + restoreGeometry(settings.value("geometry").toByteArray()); + restoreState(settings.value("windowState").toByteArray()); +} + +void MainDialog::onToolButton1Clicked() +{ + QMessageBox::information(this, "Button Clicked", "Button 1 was clicked!"); +} + +void MainDialog::onToolButton2Clicked() +{ + QMessageBox::information(this, "Button Clicked", "Button 2 was clicked!"); +} + +void MainDialog::onAboutButtonClicked() +{ + QMessageBox::information(this, "Button Clicked", "About"); +} + diff --git a/applications/emsConfigurer/maindialog.h b/applications/emsConfigurer/maindialog.h index b969429..21b0f9c 100644 --- a/applications/emsConfigurer/maindialog.h +++ b/applications/emsConfigurer/maindialog.h @@ -1,13 +1,19 @@ -#ifndef MAINDIALOG_H +#ifndef MAINDIALOG_H #define MAINDIALOG_H -#include +#include +#include +#include +#include +#include +#include namespace Ui { class MainDialog; } -class MainDialog : public QDialog + +class MainDialog : public QMainWindow { Q_OBJECT @@ -15,8 +21,31 @@ public: explicit MainDialog(QWidget *parent = nullptr); ~MainDialog(); +public slots: + void changePage(QListWidgetItem *current, QListWidgetItem *previous); + + +private slots: + void onToolButton1Clicked(); + void onToolButton2Clicked(); + void onAboutButtonClicked(); + private: Ui::MainDialog *ui; + QListWidget *m_pDeviceListWidget; + QStackedWidget *m_pDevicestackedWidget; + QToolBar *m_pMainToolBar; + +private: + void InitializeUI(); + void CreateToolbar(); + void CreateIcon(const QIcon& icon,QString text); + void CreateTablePage(); + +protected: + void closeEvent(QCloseEvent *event) override; + void saveWindowState(); + void loadWindowState(); }; #endif // MAINDIALOG_H diff --git a/applications/emsConfigurer/maindialog.ui b/applications/emsConfigurer/maindialog.ui index 0a83fd3..d779f0c 100644 --- a/applications/emsConfigurer/maindialog.ui +++ b/applications/emsConfigurer/maindialog.ui @@ -2,6 +2,9 @@ MainDialog + + Qt::NonModal + 0 @@ -10,6 +13,9 @@ 665 + + Qt::NoContextMenu + Dialog