Qt模拟Linux终端 1 – Linux指令调用

 

在一些特定场合中,直接调用Linux系统中自带的终端来执行Linux命令是不太适用的,有时用户就希望能不打开终端,直接在软件界面中输入命令。对于这种情况,可以使用QProcess来实现。

Qt对于QProcess的描述如下:

The QProcess class is used to start external programs and to communicate with them.

To start a process, pass the name and command line arguments of the program you want to run as arguments to start(). Arguments are supplied as individual strings in a QStringList.

QProcess 类用于启动外部程序并与它们通信。

要启动进程,请将要运行的程序的名称和命令行参数作为参数传递给 start()。 参数作为 QStringList 中的单个字符串提供。

代码实现

  • 一个QLineEdit用于输入命令,回车时响应操作;
  • 一个QtextBrowser用于输出信息;

mainwindow.h

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QPointer>
  5. #include <QStandardItemModel>
  6. class QProcess;
  7. QT_BEGIN_NAMESPACE
  8. namespace Ui { class MainWindow; }
  9. QT_END_NAMESPACE
  10. class MainWindow : public QMainWindow
  11. {
  12. Q_OBJECT
  13. public:
  14. MainWindow(QWidget *parent = 0);
  15. ~MainWindow();
  16. private slots:
  17. void on_lineEdit_returnPressed();
  18. void readBashStandardOutputInfo();
  19. void readBashStandardErrorInfo();
  20. private:
  21. Ui::MainWindow *ui;
  22. QPointer<QProcess> m_process;
  23. };
  24. #endif // MAINWINDOW_H

mainwindow.cpp

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QProcess>
  4. #include <QDebug>
  5. MainWindow::MainWindow(QWidget *parent)
  6. : QMainWindow(parent)
  7. , ui(new Ui::MainWindow)
  8. {
  9. ui->setupUi(this);
  10. m_process = new QProcess;
  11. m_process->start("bash");
  12. m_process->waitForStarted();
  13. connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readBashStandardOutputInfo()));
  14. connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(readBashStandardErrorInfo()));
  15. }
  16. MainWindow::~MainWindow()
  17. {
  18. delete ui;
  19. }
  20. void MainWindow::on_lineEdit_returnPressed()
  21. {
  22. QString _str = ui->lineEdit->text();
  23. ui->textBrowser->append("Linux:~$ " + _str);
  24. m_process->write(ui->lineEdit->text().toLocal8Bit() + '\n');
  25. ui->lineEdit->clear();
  26. }
  27. void MainWindow::readBashStandardOutputInfo()
  28. {
  29. QByteArray _out = m_process->readAllStandardOutput();
  30. if(!_out.isEmpty()) ui->textBrowser->append(QString::fromLocal8Bit(_out));
  31. }
  32. void MainWindow::readBashStandardErrorInfo()
  33. {
  34. QByteArray _out = m_process->readAllStandardError();
  35. if(!_out.isEmpty()) ui->textBrowser->append(QString::fromLocal8Bit(_out));
  36. }

 

拓展

到现在为止,已经可以做到在自己的Qt软件中调用Linux指令了,由此可以拓展一下:自定义一些系统里不存在的“指令”,输入这个“指令”就调用对应的系统指令或者完成一系列的系统操作,类似Linux中的alias,但可以做的更多。比如可以让不会用Linux,不了解Linux任何一个指令的外行使用者通过该软件达到自己想要的操作(当然这个操作得开发者提前定义好)。

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇