#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中的确切位置。每当用户移动光标时,该槽函数就会被自动调用。
03-project
最新推荐文章于 2024-11-02 17:47:31 发布
本文详细描述了一个使用Qt框架构建的记事本应用程序,包括菜单栏、工具栏的创建,以及利用信号槽机制实时更新状态栏中光标行号和列号的功能。
摘要由CSDN通过智能技术生成