03-project

本文详细描述了一个使用Qt框架构建的记事本应用程序,包括菜单栏、工具栏的创建,以及利用信号槽机制实时更新状态栏中光标行号和列号的功能。
摘要由CSDN通过智能技术生成
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 设置主窗口的标题为“无标题-记事本”
    setWindowTitle("无标题-记事本");

    // 设置窗口图标为资源文件中的“th.jpg”图片
    setWindowIcon(QIcon(":/th.jpg"));

    // 调整窗口大小为800x600像素
    resize(800, 600);

    // 创建一个QTextEdit对象,并将其作为窗口的中心部件(主要内容区)
    textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);

    // 创建一个菜单栏对象,并将其设置为主窗口的菜单栏
    menuBar = new QMenuBar(this);
    setMenuBar(menuBar);

    // 在菜单栏中添加“文件(&F)”菜单项,并关联到fileMenu变量
    fileMenu = menuBar->addMenu("文件(&F)");

    // 在“文件”菜单中添加“新建(&N)”菜单项,设置快捷键为Ctrl+N
    newAction = new QAction("新建(&N)", this);
    newAction->setShortcut(QKeySequence("CTRL+N"));
    fileMenu->addAction(newAction);

    // 在“文件”菜单中添加分隔线
    fileMenu->addSeparator();

    // 在“文件”菜单中添加“新窗口(&W)”菜单项,设置快捷键为Ctrl+Shift+N
    newWindowAction = new QAction("新窗口(&W)", this);
    newWindowAction->setShortcut(QKeySequence("CTRL+SHIFT+N"));
    fileMenu->addAction(newWindowAction);

    // 在“文件”菜单中添加“打开(&O)”菜单项,设置快捷键为Ctrl+O
    openAction = new QAction("打开(&O)", this);
    openAction->setShortcut(QKeySequence("CTRL+O"));
    fileMenu->addAction(openAction);
    connect(openAction,&QAction::triggered,this,&MainWindow::openFile);

    exitAction=new QAction("退出(&X)",this);
    fileMenu->addAction(exitAction);
    connect(exitAction,&QAction::triggered,this,&MainWindow::exitFile);

    // 在菜单栏中添加“编辑(&E)”、“格式(&O)”、“查看(&V)”和“帮助(&H)”菜单
    editMenu = menuBar->addMenu("编辑(&E)");
    formatMenu = menuBar->addMenu("格式(&O)");
    viewMenu = menuBar->addMenu("查看(&V)");
    helpMenu = menuBar->addMenu("帮助(&H)");

    // 创建一个工具栏对象,并将其添加到主窗口
    toolBar = new QToolBar(this);
    addToolBar(toolBar);

    // 把之前创建的“新建(&N)”操作添加到工具栏
    toolBar->addAction(newAction);

    // 把之前创建的“新窗口(&W)”操作添加到工具栏
    toolBar->addAction(newWindowAction);

    // 把之前创建的“打开(&O)”操作添加到工具栏
    toolBar->addAction(openAction);

    // 创建一个状态栏对象,并将其设置为主窗口的状态栏
    statusBar = new QStatusBar(this);
    setStatusBar(statusBar);

    // 创建一个QLabel对象并将其父对象设置为当前窗口(this)
    label = new QLabel(this);

    // 设置新创建的QLabel的文字内容为"Ready"
    label->setText("Ready");

    // 将新创建的标签(label)添加到状态栏(statusBar)中
    statusBar->addWidget(label);

    // 创建另一个QLabel对象(lnColLabel),同样将其父对象设置为当前窗口
    lnColLabel = new QLabel(this);

    // 设置lnColLabel的文字内容为"Ln:0 Col:0\t",这里显示的是当前光标所在的行号和列号初始值
    lnColLabel->setText("Ln:0 Col:0\t");

    // 将lnColLabel作为永久部件添加到状态栏,这意味着即使状态栏的空间不足,lnColLabel也不会被隐藏
    statusBar->addPermanentWidget(lnColLabel);

    // 使用信号槽机制,将QTextEdit的cursorPositionChanged信号与自定义槽函数lnColUpdata连接
    // 当QTextEdit中的光标位置发生变化时,会自动调用lnColUpdata函数来更新lnColLabel的文本信息
    connect(textEdit, &QTextEdit::cursorPositionChanged, this, &MainWindow::lnColUpdata);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::openFile()
{
    QString filename=QFileDialog::getOpenFileName(this,"Open File",QDir::currentPath(),"All Files(*)");
    if(filename.isEmpty())
        return ;
}

void MainWindow::exitFile()
{
    close();
}
// 定义槽函数lnColUpdata,该函数将在QTextEdit的光标位置发生变化时被调用
void MainWindow::lnColUpdata()
{
    // 获取当前QTextEdit中的光标所处的块(即文本行)的编号,行号从0开始计数
    int line = textEdit->textCursor().blockNumber();

    // 获取当前光标在当前块(行)中的列号,列号也是从0开始计数
    int column = textEdit->textCursor().columnNumber();

    // 将行号和列号转换为字符串,并在其前加上"Ln:"和"Col:"标识,同时将行号和列号加1以符合人类阅读习惯(行号和列号通常从1开始)
    QString lineStr = "Ln:" + QString::number(line + 1);
    QString columnStr = "Col:" + QString::number(column + 1);

    // 将行号和列号信息拼接成完整的字符串,并设置到之前创建的lnColLabel标签上
    lnColLabel->setText(lineStr + " " + columnStr + "\t");
}

// 注释总结:
// 此槽函数实时更新状态栏中的行号和列号信息,以便用户随时了解当前光标在QTextEdit中的确切位置。每当用户移动光标时,该槽函数就会被自动调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值