diff --git a/untitled/mainwindow.cpp b/untitled/mainwindow.cpp index 48c40d9..6ed1bc7 100644 --- a/untitled/mainwindow.cpp +++ b/untitled/mainwindow.cpp @@ -19,20 +19,39 @@ #include #include #include - +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setWindowTitle("综合平台编程器"); - setGeometry(500, 200, 1000, 700); - m_tabWidget = new QTabWidget(this);// 初始化标签页 - m_tabWidget->setTabsClosable(true); - setCentralWidget(m_tabWidget); - connect(m_tabWidget, &QTabWidget::currentChanged, this, &MainWindow::onTabChanged); - connect(m_tabWidget, &QTabWidget::tabCloseRequested, this, &MainWindow::onCloseTab); - createMenus();// 创建菜单和工具栏 - createToolbars(); - createLogPanel(); // 创建日志面板 + setGeometry(500, 200, 1000, 700); + + // 1. 先创建中央区域 + QWidget* centralContainer = new QWidget; + QHBoxLayout* centralLayout = new QHBoxLayout(centralContainer); + centralLayout->setContentsMargins(0, 0, 0, 0); + + // 2. 左侧工具栏区 + createToolbars(); // 创建工具栏对象 + centralLayout->addWidget(m_leftToolBar); + + // 3. 中央文档区 + m_tabWidget = new QTabWidget; + m_tabWidget->setTabsClosable(true); + centralLayout->addWidget(m_tabWidget, 1); // 占据剩余空间 + + // 4. 设置中央部件 + setCentralWidget(centralContainer); + + // 5. 创建日志面板 + createLogPanel(); + + // 连接信号 + connect(m_tabWidget, &QTabWidget::currentChanged, this, &MainWindow::onTabChanged); + connect(m_tabWidget, &QTabWidget::tabCloseRequested, this, &MainWindow::onCloseTab); + + // 创建菜单 + createMenus(); } MainWindow::~MainWindow() @@ -41,49 +60,44 @@ MainWindow::~MainWindow() void MainWindow::createLogPanel() { - // 创建可停靠窗口 m_logDock = new QDockWidget("消息输出", this); - // 设置为只能在底部停靠 m_logDock->setAllowedAreas(Qt::BottomDockWidgetArea); m_logDock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); - - m_logDock->setMinimumHeight(150);//设置高度范围 + m_logDock->setMinimumHeight(150); m_logDock->setMaximumHeight(400); - QWidget* logWidget = new QWidget;// 创建主内容部件 - QVBoxLayout* logLayout = new QVBoxLayout; - logLayout->setContentsMargins(2, 2, 2, 2); - - m_logEdit = new QTextEdit;// 创建文本编辑框用于显示日志 + // 创建日志编辑框(启用自定义菜单) + m_logEdit = new QTextEdit; m_logEdit->setReadOnly(true); m_logEdit->setFont(QFont("Consolas", 10)); m_logEdit->setStyleSheet("background-color: #f8f8f8; border: 1px solid #d9d9d9;"); - m_logEdit->setMinimumHeight(100); - - QHBoxLayout* btnLayout = new QHBoxLayout;// 创建控制按钮 - m_clearLogBtn = new QPushButton("清空日志"); - - btnLayout->addWidget(m_clearLogBtn); - btnLayout->addStretch(); - // 组合布局 - logLayout->addLayout(btnLayout); - logLayout->addWidget(m_logEdit); - logWidget->setLayout(logLayout); + // 关键修改:启用自定义右键菜单 + m_logEdit->setContextMenuPolicy(Qt::CustomContextMenu); // 禁用默认菜单[4,5](@ref) + connect(m_logEdit, &QTextEdit::customContextMenuRequested, + this, &MainWindow::showLogContextMenu); // 连接自定义菜单信号 - m_logDock->setWidget(logWidget); - // 添加到底部dock区域,这会使它横跨整个窗口宽度 + // 直接以日志编辑框作为面板内容 + m_logDock->setWidget(m_logEdit); addDockWidget(Qt::BottomDockWidgetArea, m_logDock); +} +void MainWindow::showLogContextMenu(const QPoint &pos) +{ + QMenu menu; // 无需持久化,每次右键时创建 - // 初始显示状态 - m_logDock->show(); + // 1. 添加“复制”功能(复用系统功能) + QAction* copyAction = menu.addAction("复制"); + connect(copyAction, &QAction::triggered, m_logEdit, &QTextEdit::copy); // 直接调用QTextEdit的复制功能[2,5](@ref) - // 连接信号 - connect(m_clearLogBtn, &QPushButton::clicked, this, &MainWindow::onClearLogButtonClicked); -} + // 2. 添加“清空日志”功能 + QAction* clearAction = menu.addAction("清空日志"); + connect(clearAction, &QAction::triggered, this, &MainWindow::onClearLogButtonClicked); + // 3. 显示菜单(无其他项) + menu.exec(m_logEdit->viewport()->mapToGlobal(pos)); // 精准显示在点击位置[4](@ref) +} // 槽函数实现 void MainWindow::onClearLogButtonClicked() { diff --git a/untitled/mainwindow.h b/untitled/mainwindow.h index 88d5959..64422dc 100644 --- a/untitled/mainwindow.h +++ b/untitled/mainwindow.h @@ -32,9 +32,10 @@ private slots: void onOpen(); // 打开文档 void onCloseTab(int index); // 关闭标签页 void onClearLogButtonClicked(); - + void showLogContextMenu(const QPoint &pos); private: void createMenus(); // 创建菜单栏 + QWidget* m_logPanelContainer; QDockWidget* m_logDock; QTextEdit* m_logEdit; QPushButton* m_clearLogBtn; diff --git a/untitled/untitled.pro.user b/untitled/untitled.pro.user index ab91761..b6607b4 100644 --- a/untitled/untitled.pro.user +++ b/untitled/untitled.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId