Qt 小白成长系列 1-- 官方 文本搜索示例解析

此示例是官方QT 上的 Creating a Qt Widget Based Application

文档:https://doc.qt.io/qtcreator/zh/creator-writing-program.html

这个是适合入门的教程,可以跟着一步步来,这里我就不细说了,但是有几个问题

1、布局

对入门者来说,布局介绍的不足,一句话带过了,尤其是布局搞错了后,如何恢复正常,需要自己摸索

几个小白需要注意的地方:

1)、右侧选中某个布局后,才能对这个布局整体操作,比如拉伸,挪动等,否则,很可能移动某个控件,破坏了布局

2)、垂直布局、水平布局重调时,有时需要把整个子布局先拖离原布局,然后再试着把其它控件放进去后,适配顶层布局后,再把这个子布局拖进去,适配顶层布局

2、你照着做完了,很可能达不到搜索的目的

原因1)、焦点问题,需要把焦点重定位到文本上,原文档代码没有这个

找到后,加个设置焦点就可以

ui->textEdit->setFocus();

原因2)、原文的例子是 FindWholeWords 参数,这导致中文找不到,FindWholeWords是以空格 标点分开的做整个单词,不适应中文,可以把这个参数去掉

ui->textEdit->find(searchString, QTextDocument::FindWholeWords);

修改后

cpp 复制代码
void TextFinder::on_findButton_clicked()
{
    QString searchString=ui->lineEdit->text();


    bool bFound = ui->textEdit->find(searchString);// ui->textEdit->find(searchString, QTextDocument::FindWholeWords);

    if (bFound)
    {
        qDebug() << "找到了 '" << searchString << "'";

            //  【关键修复】将焦点设置回 textEdit,这样你才能看到光标
            ui->textEdit->setFocus();

        // 确保找到的文本在视图中是可见的
        // 获取 textEdit 的光标
       // QTextCursor cursor = ui->textEdit->textCursor();
        // 滚动视图,使光标所在的矩形区域可见
       // ui->textEdit->ensureCursorVisible();

    }
    else
    {
        qDebug() << "未找到 '" << searchString << "'";
        // 可以给用户一个提示
        // QMessageBox::information(this, "Not Found", "The text was not found.");
    }
}
cpp 复制代码
void TextFinder::LoadTextFile()
{
    QFile  inputFile(":/input.txt");
    inputFile.open(QIODevice::ReadOnly);

    QTextStream in(&inputFile);
    QString line=in.readAll();
    inputFile.close();

    // 直接设置一个你知道内容的字符串
  //  QString line = "This is a test. This is only a test.";


    ui->textEdit->setPlainText(line);

    ui->textEdit->moveCursor(QTextCursor::Start);

//    QTextCursor cursor=ui->textEdit->textCursor();
//    cursor.movePosition(QTextCursor::Start,QTextCursor::MoveAnchor,1);

}
相关推荐
伊灵eLing6 分钟前
GoLang 语言基础
开发语言·后端·golang
两年半的个人练习生^_^6 分钟前
JMM 进阶:彻底理解 synchronized 实现原理
java·开发语言
小白不白1118 分钟前
Invoke的用法
开发语言·人工智能·数码相机·计算机视觉·c#
techdashen11 分钟前
What is maintenance, anyway?
开发语言·后端·rust
万法若空14 分钟前
C/C++基本类型表示范围
c语言·开发语言·c++
yijianace17 分钟前
Python爬虫实战:BooksToScrape 多线程爬取与图片下载
开发语言·爬虫·python
凡人叶枫24 分钟前
Effective C++ 条款15:在资源管理类中提供对原始资源的访问
linux·开发语言·c++·stm32·单片机
swordbob24 分钟前
Spring Boot 2.0 改 CGLIB 后,接口实现是否有影响
java·开发语言·spring
AI人工智能+电脑小能手29 分钟前
【大白话说Java面试题 第106题】【并发篇】第6题:synchronized 锁的锁对象可以是什么?
java·开发语言·面试
质造者29 分钟前
Python 本地 RAG 实战 | Ollama+ChromaDB 实现 PDF 离线智能问答
开发语言·python·pdf·大模型·rag