Use QT para realizar búsquedas de expresiones regulares y limitarlas a la barra de tareas de alojamiento del sistema

Resultados como se muestra a continuación:

El rojo es el software que implementé ampliado en la barra de alojamiento del sistema 

Una expresión regular es una herramienta poderosa para hacer coincidir y manipular texto.Es un patrón que consta de una serie de caracteres y caracteres especiales que describen los patrones de texto que deben coincidir. Las expresiones regulares pueden buscar, reemplazar, extraer y validar patrones específicos en el texto.

1. Use QT para implementar expresiones regulares,

Existen principalmente los siguientes métodos para implementar expresiones regulares en Qt:

  • Utilice la clase QRegExp, una clase para trabajar con expresiones regulares que proporciona métodos y propiedades para crear, validar, buscar y reemplazar expresiones regulares. La clase QRegExp admite la sintaxis de expresiones regulares de estilo Perl y también se pueden seleccionar otros modos de sintaxis. Por ejemplo, puede usar la clase QRegExp para verificar que una dirección de correo electrónico sea válida:

        La parte del código es la siguiente:

// 创建一个正则表达式对象,匹配邮箱地址的格式
QRegExp rx("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
// 创建一个邮箱地址字符串
QString email = "[email protected]";
// 使用exactMatch()方法判断字符串是否完全符合正则表达式
bool valid = rx.exactMatch(email); // 返回true
  • Use la clase QRregularExpression, que es una clase para procesar expresiones regulares, que se introdujo en Qt5 y se implementó en base a la biblioteca PcRE, que es más potente y flexible que la clase 2 de QRegExp. La clase QRegularExpression admite la sintaxis de expresiones regulares de estilo ECMAScript, y también se pueden seleccionar otros modos de sintaxis3. Por ejemplo, puede usar la clase QRegularExpression para encontrar todas las palabras en una cadena y contar sus ocurrencias:
  • La parte del código es la siguiente:
// 创建一个正则表达式对象,匹配单词边界和字母数字字符
QRegularExpression re("\\b\\w+\\b");
// 创建一个字符串
QString text = "Hello, world! This is a test.";
// 使用globalMatch()方法返回一个匹配迭代器
QRegularExpressionMatchIterator i = re.globalMatch(text);
// 创建一个哈希表,用于存储单词和出现次数
QHash<QString, int> wordCount;
// 遍历匹配结果
while (i.hasNext()) {
    // 获取当前匹配对象
    QRegularExpressionMatch match = i.next();
    // 获取匹配到的单词
    QString word = match.captured(0);
    // 将单词转换为小写
    word = word.toLower();
    // 在哈希表中增加单词出现的次数
    wordCount[word]++;
}

Aquí elijo el segundo para demostración:

Tenga cuidado de incluir el archivo de encabezado #include <QRegExpValidator>, de lo contrario, se informará un error.

// 调用match()方法,传入一个要匹配的字符串
        ui->textEdit->clear();
        QString need = ui->lineEdit->text();
        // 创建一个QRegularExpression对象,表示匹配一个整数的模式
        QRegularExpression re(need);
        for(const QString file : message)
        {
            QString p=file;
            QRegularExpressionMatch match = re.match(p);
            bool hasMatch = match.hasMatch(); // true
            if (hasMatch)//如果符合正则表达式,那么就输出该文件名
            {
                // 输出该行
                qDebug() << p;
                ui->textEdit->append(p);
            }
            else{
                qDebug()<<"没有匹配";
                qDebug()<<need;
            }
            if(need=="")
            {

                ui->textEdit->append(p);
            }
        }

La parte del código anterior obtiene principalmente la expresión regular ingresada por el usuario a través de QlineEdit (por ejemplo: .*[carácter especificado].* significa cualquier campo de carácter que contenga el carácter especificado) y luego usa QRegularExpression para definir la ejecución de la expresión regular que viene con QT ., QRegularExpressionMatch es el segmento de cadena que necesita hacer coincidir, bool hasMatch = match.hasMatch(); define un valor booleano, si la coincidencia es exitosa, devolverá un verdadero, lo cual es conveniente para nosotros juzgar.

2. Use QT para reducir el software a la barra de alojamiento del sistema.

El código de implementación es el siguiente: se debe incluir el archivo de encabezado #include <QSystemTrayIcon>; de lo contrario, se informará un error

 // 创建一个系统托盘图标
    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setIcon(QIcon(":/Acrylic.png")); // 设置图标
    trayIcon->setToolTip("最小化到托盘"); // 设置提示文本
    trayIcon->show();
//     创建一个QMenu对象
    QMenu *trayMenu = new QMenu(this);
//     添加菜单项
    trayMenu->addAction("Show", this, SLOT(show()));
    trayMenu->addAction("Hide", this, SLOT(hide()));
    trayMenu->addSeparator();
    trayMenu->addAction("Exit", qApp, SLOT(quit()));
//     设置系统托盘图标的菜单
    trayIcon->setContextMenu(trayMenu);
//     连接系统托盘图标的activated()信号到自定义的槽函数
    connect(trayIcon, &QSystemTrayIcon::activated, this, &log_device::iconActivated);
//    this->show();

El código en la función de ranura isconActivated() en connect se muestra en la siguiente figura:

 switch (reason) {
       case QSystemTrayIcon::Trigger: // 单击左键
           // 切换主窗口的可见性
           setVisible(!isVisible());
           break;
       case QSystemTrayIcon::DoubleClick: // 双击左键
           // 显示主窗口,并激活它
           show();
           activateWindow();
           break;
       case QSystemTrayIcon::MiddleClick: // 单击中键
           // 在系统托盘中显示消息
           trayIcon->showMessage("Message", "This is a message from tray icon");
           break;
       default:
           break;
       }

Una breve descripción general de la implementación de la función anterior: primero cree un objeto QSystemTrayIcon y luego configure el ícono que se reduce al ícono en la barra de administración de tareas para mostrarlo, y luego configure el mensaje de aviso setToolTip que aparece cuando el mouse se mueve al software icono ("usted La información de aviso que desea mostrar!").

3. Realice el evento de activación de doble clic de Listview

En la interfaz de la interfaz de usuario, arrastre la vista de lista, seleccione la ranura de transferencia y luego seleccione clicked(QModellndex). Luego, escriba la función que desea lograr en la función on_listView_doubleClicked(const QModelIndex &index).

void log_device::on_listView_doubleClicked(const QModelIndex &index)
{
    QString trans=index.data().toString();
    qDebug()<<"成功"<<trans;
    QString send_text_path=path+"/"+trans;
    filter=new text_filter;
    filter->show();
    this->hide();
    filter->text_show(send_text_path);
    connect(filter,SIGNAL(open_main_window()), this, SLOT(rebulid_main()));
}

Por ejemplo, estoy aquí para lograr una ventana emergente de doble clic, se crea una instancia de otra subventana, y cuando se hace clic en la subventana para cerrarla, la ventana principal se mostrará nuevamente sin que el programa finalice.

Combinado con QTimer en el blog anterior, aquí podemos implementar una función particularmente significativa. Podemos usar QTime y QFileDialog para administrar los registros de nuestro sistema diario, incluida la visualización rápida de registros y la eliminación y administración regulares de registros (para evitar demasiado muchos registros, lo que genera demasiado espacio de almacenamiento en la computadora), las funciones de diseño de implementación específicas son las siguientes:

Primero inicialice la interfaz y haga un juicio.La función de juicio es: la diferencia en días entre el archivo de registro más antiguo y la hora actual. (Por lo tanto, se recomienda enfáticamente nombrar el archivo de registro _20230708_ para indicar la fecha en que se generó el registro). La mejor manera de comparar el tamaño de la fecha es calcular directamente la cantidad de días, año * 365 días + mes * 30 + fecha, y luego comparar directamente la diferencia.

Luego, dado que necesitamos procesar los registros en esta carpeta regularmente, debemos configurar un temporizador para que el software ejecute el juicio descrito anteriormente cada 24 horas en segundo plano. Cómo implementar la administración en segundo plano del software, solo necesitamos crear un subproceso nuevo para el tiempo de QTimer. El propósito de usar subprocesos es evitar bloquear el subproceso principal, lo que dificultará nuestra próxima función de visualización de registros.

El último es implementar la función de visualización de registros. Me uní a la vista de lista para mostrar todos los archivos en el directorio de la carpeta actual y luego hice doble clic para activar la subventana, mostrar el texto en la subventana y configurar el campo de entrada para que el usuario ingrese expresiones regulares para lograr, filtrar alguna información de registro sin importancia, para navegar rápidamente a la información de registro que queremos. (Al implementar esta función, hice que la parte de la vista de lista no fuera editable para evitar problemas innecesarios, y también optimicé la lógica, como cerrar la ventana secundaria para volver a mostrar la ventana principal, mientras que la ventana secundaria se muestra Durante el proceso, la ventana principal se oculta directamente y se agrega el ícono del software oculto en la barra de administración de tareas, y tres opciones de clic derecho [ocultar, mostrar, salir])

Lo anterior es mi experiencia en diseño de software.

Supongo que te gusta

Origin blog.csdn.net/Helloorld_1/article/details/132146359
Recomendado
Clasificación