QT:如何在文本浏览器

时间:2016-04-19 06:30:51

标签: linux qt

我想以编程方式运行Linux命令并在文本浏览器中显示输出。这是我的代码:

void MainWindow::on_pushButton_clicked(){
QString  qstr;

FILE *cl = popen("ifconfig eth0", "r");
char buf[1024];
while (fgets(buf, sizeof(buf), cl) != 0) {
    qstr = QString::fromutf8(buf);
    ui->textBrowser->setText(qstr);
}
pclose(ls);
}

但我在文本浏览器中什么都没有。如果我使用qstr更改ui->textBrowser->setText(qstr);中的"string",则可以正常使用。 有帮助吗?!感谢。

3 个答案:

答案 0 :(得分:5)

在你使用popen的例子中:

 qstr += QString::fromUtf8(buf);

但最好使用QProcess。对于动态输出使用:

QProcess* ping_process = new QProcess(this);
connect(ping_process, &QProcess::readyReadStandardOutput, [=] {
    ui->textBrowser->append(ping_process->readAllStandardOutput());
});
ping_process->start("ping", QStringList() << "8.8.8.8");

使用lambda时不要忘记添加.pro文件:

CONFIG += c++11

答案 1 :(得分:2)

使用:

QProcess p.
p.start("your_command");
p.waitForFinished(-1);

ui->textBrowser->setText(p.readAllStandardOutput());

// or

ui->textBrowser->setText(p.readAllStandardError());

比取消popen要容易得多。

答案 2 :(得分:0)

我的功能允许使用shellgrep

进行一些复杂的awk调用。
QString shell_command(const char *input) {
  QProcess p;
  QString command = QString::fromLatin1(input);
  p.start("/bin/sh", QStringList() << "-c" << command);
  p.waitForFinished(-1);
  qDebug() << "run" << command;
  auto res = p.readAllStandardOutput();
  auto err = p.readAllStandardError();
  qDebug() << "out" << res;
  qDebug() << "err" << err;
  return res;
}