记事本功能
项目完整代码:MyNotepad
界面
功能
- 编辑文本
- 文件菜单:
- 新建、打开、保存、另存为
- 打印
- 退出
- 编辑菜单:
- 撤销、重做
- 剪切、复制、粘贴
- 查找、替换
- 全选
- 插入当前时间日期
- 选项菜单
- 自动换行
- 字体
- 颜色
- 视图菜单
- 缩放
- 打开/关闭状态栏
- 其他:
- 状态栏显示当前光标位置
- 窗口标题显示文件名
- 文本内容修改后窗口显示
*
实现
主要是查找&替换功能的实现:添加一个对话框,输入查找和替换的字符串,点击查找(替换),对话框发送查找(替换)信号,主窗口接收到查找(替换)信号后,获取查找(替换)字符串进行查找(替换)。
查找功能直接调用document()->find()
函数,返回一个QTextCursor对象,调用setTextCursor()
将查找到的文本选中。
点击替换时先判断当前光标选中内容是否为想要被替换掉的内容,如果是,直接替换,否则,查找下一个并替换。进行替换时先删除当前选中再插入想替换的内容。
部分代码如下:
1 |
|
问题
设置活动窗口
1
2
3
4
5
6
7void MainWindow::activateMainWindow()
{
if(!this->isActiveWindow()) //判断是否是活动窗口
{
this->activateWindow(); //设置成活动窗口
}
}在记事本中修改文件后保存需要
ui->textEdit->document()->setModified(false)
,否则文本框的状态为已修改无法直接关闭或者打开新文件。打印文本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22// .pro 文件
QT += printsupport
// mainwindow.cpp
#include <QPrintDialog>
#include <QPrinter>
void MainWindow::printFileSlot()
{
QPrinter qPrinter;
QPrintDialog printDialog(&qPrinter); // 选择打印设备
if (printDialog.exec() == QDialog::Accepted) {
ui->textEdit->document()->print(&qPrinter); // 打印
QMessageBox::information(this, "MyNotepad","Successed!");
}
else
{
QMessageBox::information(this, "MyNotepad","Canceled!");
}
}设置文本颜色Palette,使用setColor只能修改选中文本的颜色
1
2
3
4
5
6
7
8
9
10
11void MainWindow::setColorSlot()
{
QColor qColor = ui->textEdit->palette().color(QPalette::Text);
qColor = QColorDialog::getColor(qColor, this);
if(qColor.isValid())
{
QPalette p = ui->textEdit->palette();
p.setColor(QPalette::Text, qColor); // QPalette::WindowText 无效
ui->textEdit->setPalette(p);
}
}状态栏显示当前光标位置
1
2
3
4
5
6
7
8
9
10
11void MainWindow::on_textEdit_cursorPositionChanged()
{
QTextCursor qTextCursor = ui->textEdit->textCursor(); //当前光标
int rowNum = qTextCursor.blockNumber() + 1;//获取光标所在行的行号
// int colNum = qTextCursor.columnNumber() + 1; // 该函数获取的是自动换行后的列号
int colNum = qTextCursor.positionInBlock() + 1;
_cursorInfoLabel->setText(
"# line: " + QString::number(rowNum) +
", col: " + QString::number(colNum));
_cursorInfoLabel->adjustSize();
}
记事本功能
https://ww1820.github.io/posts/35552a48/