最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

項目實戰(zhàn):Qt終端命令模擬工具 v1.0.0(實時獲取命令行輸出,執(zhí)行指令,模擬ctrl+c中

2023-02-06 11:07 作者:紅胖子_AAA紅模仿  | 我要投稿

需求

??在Qt軟件中實現(xiàn)部分終端控制命令行功能,使軟件內(nèi)可以又好的模擬終端控制,提升軟件整體契合度。

Demo演示

??

??

??

功能描述 v1.0.0

??

  • windows版本打開即可實時現(xiàn)實;

  • centOS打開抓不到默認的輸出只能抓到命令執(zhí)行的輸出結果;

  • ubuntu等其他linux-arm沒有測試;

  • 可以執(zhí)行單條指令;

  • 可以清空模擬ctrl+c結束正在操作的命令;

項目模塊化部署

??

源碼

TerminatorWidget.h

#ifndef TERMINATORWIDGET_H#define TERMINATORWIDGET_H#include <QWidget>#include <QThread>#include <QTextCursor>#include "TerminatorManager.h"namespace Ui {class TerminatorWidget;}class TerminatorWidget : public QWidget{ ? ?Q_OBJECTpublic: ? ?explicit TerminatorWidget(QWidget *parent = 0); ? ?~TerminatorWidget();protected: ? ?void initControl();protected slots: ? ?void slot_recvData(QByteArray byteArray); ? ?void slot_recvDataError(QByteArray byteArray);private slots: ? ?void on_pushButton_exec_clicked(); ? ?void on_pushButton_stop_clicked(); ? ?void on_pushButton_clear_clicked();private: ? ?Ui::TerminatorWidget *ui;private: ? ?QThread *_pTerminatorManagerThread; ? ?TerminatorManager * _pTerminatorManager;};#endif // TERMINATORWIDGET_H

TerminatorManager.h

#ifndef TERMINATORMANAGER_H#define TERMINATORMANAGER_H#include <QObject>#include <QProcess>#include <QTextCodec>class TerminatorManager : public QObject{ ? ?Q_OBJECTpublic: ? ?explicit TerminatorManager(QObject *parent = 0);public: ? ?bool getRunning() const; ? ?void wirte(QByteArray byteArray); ? ?void stop(); ? ?void ctrlC();signals: ? ?void signal_recvData(QByteArray byteArray); ? ?void signal_recvDataError(QByteArray byteArray);public slots: ? ?void slot_start(); ? ?void slot_stop();protected: ? ?void initControl();protected slots: ? ?void slot_stateChanged(QProcess::ProcessState newState); ? ?void slot_readyReadStandardOutput(); ? ?void slot_readyReadStandardError(); ? ?void slot_write(QByteArray byteArray); ? ?void slot_ctrlC();private: ? ?bool _running; ? ? ? ? ? ? ?// 是否運行 ? ?QProcess *_pProcess; ? ? ? ?// 進程 ? ?QTextCodec *_pTextCodec; ? ?// 編碼,讀取數(shù)據(jù)轉化編碼時用};#endif // TERMINATORMANAGER_H

TerminatorManager.cpp

#include "TerminatorManager.h"#include <QDebug>#include <QDateTime>//#define LOG qDebug()<<__FILE__<<__LINE__//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__//#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread()//#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd")#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")TerminatorManager::TerminatorManager(QObject *parent) ? ?: QObject(parent), ? ? ?_running(false), ? ? ?_pProcess(0), ? ? ?_pTextCodec(0){ ? ?initControl();}bool TerminatorManager::getRunning() const{ ? ?return _running;}void TerminatorManager::wirte(QByteArray byteArray){ ? ?QMetaObject::invokeMethod(this, "slot_write", Q_ARG(QByteArray, byteArray));}void TerminatorManager::ctrlC(){ ? ?QMetaObject::invokeMethod(this, "slot_ctrlC");}void TerminatorManager::slot_start(){ ? ?if(_running) ? ?{ ? ? ? ?LOG << "It's already running!!!"; ? ? ? ?return; ? ?} ? ?// 初始化子線程中的相關類 ? ?if(!_pProcess) ? ?{ ? ? ? ?_pProcess = new QProcess(); ? ? ? ?connect(_pProcess, SIGNAL(stateChanged(QProcess::ProcessState)), ? ? ? ? ? ? ? ?this, SLOT(slot_stateChanged(QProcess::ProcessState))); ? ? ? ?connect(_pProcess, SIGNAL(readyReadStandardOutput()), ? ? ? ? ? ? ? ?this, SLOT(slot_readyReadStandardOutput())); ? ? ? ?connect(_pProcess, SIGNAL(readyReadStandardError()), ? ? ? ? ? ? ? ?this, SLOT(slot_readyReadStandardError()));#ifndef LINUX ? ? ? ? ? ?_pProcess->start("cmd"); ? ? ? ? ? ?_pProcess->waitForStarted();#else// ? ? ? ? ? ?_pProcess->start("bash"); ? ? ? ? ? ?_pProcess->start("sh"); ? ? ? ? ? ?_pProcess->waitForStarted();#endif ? ?} ? ?_running = true;}void TerminatorManager::slot_stop(){ ? ?if(!_running) ? ?{ ? ? ? ?LOG << "It's not running!!!"; ? ? ? ?return; ? ?} ? ?if(_pProcess) ? ?{ ? ? ? ?_pProcess->kill(); ? ? ? ?_pProcess->close(); ? ? ? ?_pProcess->waitForFinished(); ? ? ? ?_pProcess->deleteLater(); ? ? ? ?_pProcess = 0; ? ?} ? ?_running = false;}void TerminatorManager::initControl(){ ? ?// linux下有可能獲取失敗 ? ?_pTextCodec = QTextCodec::codecForName("System");}void TerminatorManager::slot_stateChanged(QProcess::ProcessState newState){ ? ?LOG << newState;}void TerminatorManager::slot_readyReadStandardOutput(){ ? ?QByteArray byteArray = _pProcess->readAllStandardOutput();// ? ?QByteArray byteArray = _pProcess->readAll(); ? ?QString str; ? ?// 轉換為unicode ? ?if(_pTextCodec) ? ?{ ? ? ? ?str = _pTextCodec->toUnicode(byteArray); ? ?}else{ ? ? ? ?str = QString(byteArray); ? ?} ? ?emit signal_recvData(str.toUtf8());}void TerminatorManager::slot_readyReadStandardError(){ ? ?QByteArray byteArray = _pProcess->readAllStandardError(); ? ?QString str; ? ?// 轉換為unicode ? ?if(_pTextCodec) ? ?{ ? ? ? ?str = _pTextCodec->toUnicode(byteArray); ? ?}else{ ? ? ? ?str = QString(byteArray); ? ?} ? ?emit signal_recvDataError(str.toUtf8());}void TerminatorManager::slot_write(QByteArray byteArray){ ? ?if(!_pProcess) ? ?{ ? ? ? ?LOG << "Is't not running"; ? ? ? ?return; ? ?} ? ?LOG << QString(byteArray); ? ?LOG << _pProcess; ? ?_pProcess->write(byteArray); ? ?LOG;}void TerminatorManager::slot_ctrlC(){ ? ?if(!_running) ? ?{ ? ? ? ?LOG << "It's not running!!!"; ? ? ? ?return; ? ?} ? ?slot_stop(); ? ?slot_start();}

工程模板

??


項目實戰(zhàn):Qt終端命令模擬工具 v1.0.0(實時獲取命令行輸出,執(zhí)行指令,模擬ctrl+c中的評論 (共 條)

分享到微博請遵守國家法律
都昌县| 桃源县| 蒙自县| 永善县| 古丈县| 盖州市| 新乡市| 扶余县| 洪泽县| 大姚县| 中卫市| 寿宁县| 屏山县| 汝南县| 南溪县| 洛宁县| 咸宁市| 巴林左旗| 洛阳市| 淮滨县| 东乌珠穆沁旗| 正宁县| 辽宁省| 大名县| 聂拉木县| 保德县| 四子王旗| 龙川县| 乌什县| 金堂县| 张家口市| 彭州市| 监利县| 泸溪县| 军事| 友谊县| 普安县| 麻江县| 北海市| 宜春市| 冀州市|