// ============================================================================ // mainwindow_showcase.cpp —— MainWindow 实现(动态行为) // // 静态结构见 mainwindow.ui(Designer)。本文件只做: // - 资源文件应用(5.6):setWindowIcon 从 .qrc 加载 // - 状态栏(5.3):addPermanentWidget + 实时行列/字数 + showMessage 临时提示 // - 信号槽:on__ 自动连接(connectSlotsByName) // - 视图菜单:运行时操控工具栏/状态栏/浮动窗口 // ============================================================================ #include "mainwindow_showcase.h" #include "ui_mainwindow.h" // AUTOUIC 从 mainwindow.ui 生成 #include #include #include #include #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 5.6 资源文件:应用图标从 mainwindow.qrc 加载(:/icons/app.png) setWindowIcon(QIcon(":/icons/app.png")); // 5.3 状态栏:永久标签(addPermanentWidget),实时显示光标行列与字数 statusPosLabel = new QLabel(QStringLiteral("行:1 列:1 字数:0"), this); statusBar()->addPermanentWidget(statusPosLabel); // 5.5 中心部件 QTextEdit 的内容/光标变化 → 更新状态栏 connect(ui->textEdit, &QTextEdit::textChanged, this, &MainWindow::updateStatusBar); connect(ui->textEdit, &QTextEdit::cursorPositionChanged, this, &MainWindow::updateStatusBar); updateStatusBar(); } MainWindow::~MainWindow() { delete ui; } // ---- 文件菜单 ---------------------------------------------------------- void MainWindow::on_actionNew_triggered() { ui->textEdit->clear(); statusBar()->showMessage(QStringLiteral("已新建"), 2000); // 5.3 临时提示 } void MainWindow::on_actionQuit_triggered() { close(); } // ---- 视图菜单 —— 运行时操控各组件 -------------------------------------- void MainWindow::on_actionToggleToolBar_toggled(bool checked) { ui->mainToolBar->setVisible(checked); } void MainWindow::on_actionToggleStatusBar_toggled(bool checked) { statusBar()->setVisible(checked); } void MainWindow::on_actionToggleToolBarMovable_toggled(bool checked) { ui->mainToolBar->setMovable(checked); // 5.2 setMovable } void MainWindow::on_actionToggleDockFloating_triggered() { ui->dockWidget->setFloating(!ui->dockWidget->isFloating()); // 5.4 setFloating } void MainWindow::on_actionShowDock_triggered() { ui->dockWidget->show(); // 5.4 重新显示已关闭的浮动窗口 } void MainWindow::on_actionHideDock_triggered() { ui->dockWidget->hide(); // 5.4 关闭(隐藏)浮动窗口 } void MainWindow::on_actionToolBarAreaLeft_triggered() { ui->mainToolBar->setAllowedAreas(Qt::LeftToolBarArea); // 5.2 setAllowedAreas } void MainWindow::on_actionToolBarAreaRight_triggered() { ui->mainToolBar->setAllowedAreas(Qt::RightToolBarArea); } void MainWindow::on_actionToolBarAreaTop_triggered() { ui->mainToolBar->setAllowedAreas(Qt::TopToolBarArea); } void MainWindow::on_actionToolBarAreaBottom_triggered() { ui->mainToolBar->setAllowedAreas(Qt::BottomToolBarArea); } void MainWindow::on_actionToolBarAreaAll_triggered() { ui->mainToolBar->setAllowedAreas(Qt::AllToolBarAreas); } // ---- 帮助菜单 ---------------------------------------------------------- void MainWindow::on_actionAbout_triggered() { QMessageBox::about(this, QStringLiteral("关于"), QStringLiteral( "QMainWindow 教学综合示例

" "一个极简文本编辑器,演示 QMainWindow 的六大核心组件" "(wiki「5 QMainWindow」pageId 58954529):
" "5.1 菜单栏 · 5.2 工具栏 · 5.3 状态栏 · " "5.4 浮动窗口 · 5.5 中心部件 · 5.6 资源文件")); } // ---- 状态栏更新 -------------------------------------------------------- void MainWindow::updateStatusBar() { const QTextCursor c = ui->textEdit->textCursor(); const int line = c.blockNumber() + 1; const int col = c.columnNumber() + 1; const int count = ui->textEdit->toPlainText().size(); statusPosLabel->setText( QStringLiteral("行:%1 列:%2 字数:%3").arg(line).arg(col).arg(count)); }