Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "textfinder.h"
- #include "ui_textfinder.h"
- #include <QFile>
- #include <QTextStream>
- #include <string>
- #include <vector>
- #include <iterator>
- #include <iostream>
- #include <unistd.h>
- #include <QTimer>
- #include <QFile>
- #include <QDebug>
- #include <regex>
- using namespace std;
- TextFinder::TextFinder(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::TextFinder)
- {
- ui->setupUi(this);
- loadTextFile();
- ui->tabMatches->setFocus();
- ui->lineEdit->setFocus();
- ui->textEdit->viewport()->installEventFilter(this);
- }
- TextFinder::~TextFinder()
- {
- delete ui;
- }
- void TextFinder::mouseDoubleClickEvent(QMouseEvent * e) {
- qDebug() << e;
- }
- void TextFinder::mousePressEvent(QMouseEvent * e) {
- qDebug() << e;
- }
- void TextFinder::loadTextFile()
- {
- QFile inputFile(":/input.txt");
- inputFile.open(QIODevice::ReadOnly);
- QTextStream in(&inputFile);
- QString line = in.readAll();
- inputFile.close();
- ui->textEdit->setPlainText(line);
- QTextCursor cursor = ui->textEdit->textCursor();
- cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
- }
- void TextFinder::appendMatchList(QString captures)
- {
- const char *qp = qPrintable(captures);
- ui->matchBox->appendPlainText(qp);
- }
- void TextFinder::highlightMatches()
- {
- QRegularExpression rx(ui->lineEdit->text(), QRegularExpression::CaseInsensitiveOption);
- QString searchString = ui->lineEdit->text();
- QTextCursor tc(ui->textEdit->textCursor());
- tc.select(QTextCursor::Document);
- QTextCursor hc(ui->textEdit->textCursor());
- QList<QTextEdit::ExtraSelection> extraSelections;
- QRegularExpressionMatch match;
- QRegularExpressionMatchIterator i = rx.globalMatch(ui->textEdit->toPlainText());
- const char* txt = qPrintable(ui->textEdit->toPlainText());
- string inText(txt);
- const char* ss = qPrintable(searchString);
- string s(ss);
- try
- {
- regex e (s);
- regex_iterator<string::iterator> rit (inText.begin(), inText.end(), e);
- regex_iterator<string::iterator> rend;
- while (rit != rend) {
- cout << rit->str() << endl;
- ++rit;
- }
- }
- catch(...) {
- }
- if (!ui->textEdit->isReadOnly()) {
- ui->matchBox->clear();
- ui->textEdit->moveCursor(QTextCursor::Start);
- QColor color_green = QColor(Qt::green).lighter(130);
- QColor color_blue = QColor(Qt::blue).lighter(170);
- while (i.hasNext()) {
- QRegularExpressionMatch match = i.next();
- // Begin highlighting text
- tc.beginEditBlock();
- if (rx.captureCount() == 0) {
- hc.setPosition(match.capturedStart(), QTextCursor::MoveAnchor);
- hc.setPosition(match.capturedEnd(), QTextCursor::KeepAnchor);
- QTextEdit::ExtraSelection extra;
- extra.format.setBackground(color_green);
- extra.cursor = hc;
- extraSelections.append(extra);
- } else if (rx.captureCount() == 1) {
- hc.setPosition(match.capturedStart(), QTextCursor::MoveAnchor);
- hc.setPosition(match.capturedEnd(), QTextCursor::KeepAnchor);
- QTextEdit::ExtraSelection extra;
- extra.format.setBackground(color_blue);
- extra.cursor = hc;
- extraSelections.append(extra);
- }
- // End highlight
- tc.endEditBlock();
- }
- appendMatchList(match.captured());
- ui->textEdit->setExtraSelections(extraSelections);
- }
- }
- void TextFinder::on_findButton_clicked()
- {
- //highlightMatches();
- //QString searchString = ui->lineEdit->text();
- //ui->textEdit->find(searchString, QTextDocument::FindWholeWords);
- }
- void TextFinder::on_lineEdit_returnPressed()
- {
- on_findButton_clicked();
- }
- void TextFinder::on_lineEdit_textChanged(const QString &arg1)
- {
- if (ui->lineEdit->text().size()<2) {
- QTimer::singleShot(750, this, SLOT(highlightMatches()));
- } else {
- QTimer::singleShot(300, this, SLOT(highlightMatches()));
- }
- }
- /*
- void TextFinder::mouseDoubleClickEvent(QMouseEvent * e) {
- bool m_leftButton = false;
- if (e->button() == Qt::LeftButton) {
- m_leftButton = true;
- qDebug() << "true";
- } else {
- qDebug() << "false";
- }
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement