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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

define_mine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值