Qt写一个文档复制粘贴助手app

简介: 写了一个把剪贴板中的文字中的空格和换行删除,然后再扔给剪贴板的windows程序主要为了应付从cajreader中拷贝文字时候的空格 格式 换行太多的情况

Qt写一个文档复制粘贴助手app

环境如下
在这里插入图片描述

创建工程

打开Qt Creater 7.0.0(community)
下载安装环境的自行百度吧
我们点击文件-> New Project ->然后再下图中选择Qt widgets Application
按照如下选好之后,选择choose
在这里插入图片描述

在如下界面中,名字是你的工程名,路径是工程所在路径,会在工程所在路径下面创建一个文件夹
在这里插入图片描述

选择build System ,我这里无脑选择Qmake
在这里插入图片描述

一切都无脑下一步,不细说了这里直接贴图
在这里插入图片描述

加了一个中文的translation 不确定是干嘛的
在这里插入图片描述

选择kit ,我的版本可能新一点
在这里插入图片描述

Summary
在这里插入图片描述

创建之后的文件夹路径如下,我这是开了两个工程,但是文件夹都是创建的基本工程,没有自行新加文件夹或者文件
在这里插入图片描述

app界面编辑

双击打开ui文件,看到前端界面
在这里插入图片描述

前端界面如下
在这里插入图片描述

添加一个按键(pushButton)和一个文本框(textBrowser)
添加方法为拖拽
在这里插入图片描述

这个时候点击运行 下面的绿色运行可以看见有界面弹出了,通过点击debug窗口修改构建配置
在这里插入图片描述

运行之后界面如下:
在这里插入图片描述

处理程序添加

回到刚才的编辑界面,编辑mainwindow.cpp
在这里插入图片描述

全部程序如下,下面分小节单独解释一下

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QClipboard>

std::string formatString(std::string str) {
    std::string newStr = str;
    int r = newStr.find('\r');
    while (r != std::string::npos)
    {

        if (r != std::string::npos)
        {
        newStr.replace(r, 1, "");
        r = newStr.find('\r');
        }

    }
    r = newStr.find(' ');
    while (r != std::string::npos)
    {
        if (r != std::string::npos)
        {
        newStr.replace(r, 1, "");
        r = newStr.find(' ');
        }
    }
    r = newStr.find('\n');
    while (r != std::string::npos)
    {

        if (r != std::string::npos)
        {
        newStr.replace(r, 1, "");
        r = newStr.find('\n');
        }

    }
    return newStr;
}


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Init();
}

MainWindow::~MainWindow()
{
    delete ui;
}

//void MainWindow::onButton
void MainWindow::Init(){
    connect(ui->onButton,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum(bool)));

}
void MainWindow::doProcessClickNum(bool){
//    ui->textBrowser->setPlainText("s b");
    QClipboard *clipboard = QApplication::clipboard();
    QString text;
    text = QString::fromStdString(formatString(clipboard->text().toStdString()));
    clipboard->setText(text);
    ui->textBrowser->setPlainText(text);
}

mainwidow.h 的文件在修改后如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void doProcessClickNum(bool);

private:
//    QPushButton *onButton;
    Ui::MainWindow *ui;

    void Init();

};
#endif // MAINWINDOW_H

字符串删减

formatString函数将输入中的换行和空格删除
(本功能用于处理caj阅读器中复制出来的文档全都有奇奇怪怪的东西)
具体实现如果看不懂可以去查c++字符串

std::string formatString(std::string str) {
    std::string newStr = str;
    int r = newStr.find('\r');
    while (r != std::string::npos)
    {

        if (r != std::string::npos)
        {
        newStr.replace(r, 1, "");
        r = newStr.find('\r');
        }

    }
    r = newStr.find(' ');
    while (r != std::string::npos)
    {
        if (r != std::string::npos)
        {
        newStr.replace(r, 1, "");
        r = newStr.find(' ');
        }
    }
    r = newStr.find('\n');
    while (r != std::string::npos)
    {

        if (r != std::string::npos)
        {
        newStr.replace(r, 1, "");
        r = newStr.find('\n');
        }

    }
    return newStr;
}

将按键,触发事件和函数绑定

具体的原理不清楚,但是在Init函数中加了这个connect函数,把ui的button 和SIGNAL,触发程序都指定之后,就会在按键按下之后触发doProcessClickNum(bool)函数

void MainWindow::Init(){
    connect(ui->onButton,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum(bool)));

}

按键函数

具体功能是,从剪贴板获取文字,将剪贴板中的文字中的空格,换行删除,并传递给剪贴板,以及把结果输出给textBrowser显示

void MainWindow::doProcessClickNum(bool){
    QClipboard *clipboard = QApplication::clipboard();
    QString text;
    text = QString::fromStdString(formatString(clipboard->text().toStdString()));
    clipboard->setText(text);
    ui->textBrowser->setPlainText(text);
}

程序单独运行

就算生成的是release ,.exe文件运行可能也会报错各种dll找不到,自己复制粘贴还会报错入口找不到
在这里插入图片描述

这里就要用到windeployqt
这里贴一下别人的介绍:
Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行。
因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe。

生成exe文件并拷贝

好了,知道它是干嘛的了,我们把从工程中用Release 编译输出的.exe文件复制出来,我的路径是这样的 各位自行参考
D:\project\Qtproj\build-txt_assist-Desktop_Qt_6_2_4_MinGW_64_bit-Release\release\txt_assist.exe
把txt_assist.exe 复制到另一个文件夹下,可以给他单独创建一个文件夹,比如text,我的路径如下
D:\project\Qtproj\test

打开Qt命令行

我的命令行如下
在这里插入图片描述

打开MinGW这个命令行,因为我编译时用的是大概率是上面这个
执行下面这条语句。exe文件路径用你自己的路径
在这里插入图片描述

然后就会发现这个路径下面多了一堆东西
在这里插入图片描述

这个时候直接双击这个txt_assist.exe,就可以直接运行了

另外如果直接用cmd执行windeployqt txt_assist.exe这句话会报错:
Warning: Unable to read c:\qt\qt_1489878162099\_b_env\Library\mkspecs\qconfig.pri:
可能是它默认路径下的windeployqt和我的不是一个版本
如果有需要的可以从这里下载,不过我也不知道换台电脑能不能用
链接:https://pan.baidu.com/s/1LFFUlweWEUcNYHrizHItVQ?pwd=xvt0
提取码:xvt0

目录
相关文章
|
4月前
|
Windows
【Azure 应用服务】收集App Service 关于Availability Zone, Health check 以及 Traffic Manager的文档,并了解高可用(HA)和灾备(DR)
【Azure 应用服务】收集App Service 关于Availability Zone, Health check 以及 Traffic Manager的文档,并了解高可用(HA)和灾备(DR)
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
97 0
|
1月前
|
C#
【Azure App Service】使用Microsoft.Office.Interop.Word来操作Word文档,部署到App Service后报错COMException
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)).
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
132 7
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的成人教育APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的成人教育APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的多功能智能手机阅读APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的多功能智能手机阅读APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的宠物饲养管理APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的宠物饲养管理APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的课程考勤及作业提交App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的课程考勤及作业提交App的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的电影信息推荐APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的电影信息推荐APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的环境保护生活App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的环境保护生活App的详细设计和实现(源码+lw+部署文档+讲解等)
33 0