Qt笔记-Linux程序控制台启动界面实例

x33g5p2x  于2021-12-07 转载在 Linux  
字(2.2k)|赞(0)|评价(0)|浏览(423)

最近在做Linux的C++程序,用的是Qt控制台程序,突然间有了想法,为什么不做成向Redis启动那样的,B格也高点,就像这样的。

在此写了个实例,如下运行截图:

程序结构如下;

源码如下:

Banner.h

#ifndef BANNER_H
#define BANNER_H

class Banner
{
public:
    Banner();
    void printBar();
};

#endif // BANNER_H

ColorPrint.h

#ifndef COLORPRINT
#define COLORPRINT

#include <QMap>
#include <QString>

class ColorPrint{

public:
    ColorPrint(){

        this->m_colorMap.insert("@red@", "\033[31m");
        this->m_colorMap.insert("@blue@", "\033[34m");
        this->m_colorMap.insert("@green@", "\033[32m");
        this->m_colorMap.insert("@over@", "\033[0m");
    }

    QString getColorString(const QString &str){

        QString ret(str);
        QList<QString> keyList = this->m_colorMap.keys();
        for(int i = 0; i < keyList.size(); i++){

            ret = ret.replace(keyList[i], this->m_colorMap.value(keyList[i]));
        }

        return ret;
    }

private:
    QMap<QString, QString> m_colorMap;
};

#endif // COLORPRINT

Banner.cpp

#include "Banner.h"
#include "ColorPrint.h"
#include <QFile>
#include <QDebug>
#include <QTextStream>

Banner::Banner()
{

}

void Banner::printBar()
{
    QFile file(":/res/bar.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){

        qDebug() << "open failed";
        return;
    }

    QString all = file.readAll();
    ColorPrint cp;
    QString cpStr = cp.getColorString(all);
    qDebug().noquote() << cpStr;
    file.close();
}

main.cpp

#include "Banner.h"
#include "ColorPrint.h"
#include <QFile>
#include <QDebug>
#include <QTextStream>

Banner::Banner()
{

}

void Banner::printBar()
{
    QFile file(":/res/bar.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){

        qDebug() << "open failed";
        return;
    }

    QString all = file.readAll();
    ColorPrint cp;
    QString cpStr = cp.getColorString(all);
    qDebug().noquote() << cpStr;
    file.close();
}

res/bar.txt

@green@ ________  _________@over@
@green@|\   __  \|\___   ___\@over@         @blue@Version: 5.5.1@over@
@green@\ \  \|\  \|___ \  \_|@over@         @red@BannerDemo : it1995@over@
@green@ \ \  \\\  \   \ \  \@over@
@green@  \ \  \\\  \   \ \  \@over@
@green@   \ \_____  \   \ \__\@over@
@green@    \|___| \__\   \|__|@over@
@green@          \|__|@over@

注意:这里我是准备了一个bar文件,然后用里面@green@这些字符串替换了linux的\033[32m,原因是,如果放原始的,那么QFile读取到QString后,这个\就会被转义,使用noquote无法解决,如果直接在QString中输入\033就不会出现这样的问题。并且个人感觉自定义规则,然后替换,可读性估计会更好。

如有更好的方法,希望大佬们留言指导下。

相关文章