找回密码
 立即注册
收起左侧

怎么用QT实现tracert命令

12
回复
11900
查看
[复制链接]
累计签到:35 天
连续签到:1 天
来源: 2015-12-8 14:23:09 显示全部楼层 |阅读模式
10Qter豆
我们计算机网络课程设计是基于tracert实现目标路径的跟踪,windows的API我不懂,想用qt实现,但不知道怎么下手?求哪位大神指点下

最佳答案

查看完整内容

Qprocess,调用cmd。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2015-12-8 14:23:10 显示全部楼层
Qprocess,调用cmd。
回复

使用道具 举报

累计签到:35 天
连续签到:1 天
2015-12-9 20:36:07 显示全部楼层
Syylc120317 发表于 2015-12-8 17:19
Qprocess,调用cmd。

这样的方法我当然知道了,但是cmd的输出只能出现在程序输出窗口,怎么让它出现在gui界面上,如文本框上
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2015-12-9 21:32:20 显示全部楼层
本帖最后由 Syylc120317 于 2015-12-9 21:33 编辑
咬狗的人 发表于 2015-12-9 20:36
这样的方法我当然知道了,但是cmd的输出只能出现在程序输出窗口,怎么让它出现在gui界面上,如文本框上 ...

这个是可以获取参数的啊。
  1. //调用外部命令
  2.     QProcess p;
  3.     p.start("tasklist /FI "PID EQ " + QString(pidChar) + " "");
  4.     p.waitForFinished();
  5.     //得到返回结果
  6.     QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
  7.     //关闭外部命令
  8.     p.close();
复制代码
回复

使用道具 举报

累计签到:35 天
连续签到:1 天
2015-12-11 17:32:25 显示全部楼层
Syylc120317 发表于 2015-12-9 21:32
这个是可以获取参数的啊。

我将cmd台上的输出显示到gui界面上,但是会出现乱码,应该怎么样才能消除乱码,我在网上找了许多方法都不行
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2015-12-11 20:21:14 显示全部楼层
咬狗的人 发表于 2015-12-11 17:32
我将cmd台上的输出显示到gui界面上,但是会出现乱码,应该怎么样才能消除乱码,我在网上找了许多方法都不行 ...

建议看一下QTextCodec类。
回复

使用道具 举报

累计签到:35 天
连续签到:1 天
2015-12-12 09:23:34 显示全部楼层
Syylc120317 发表于 2015-12-11 20:21
建议看一下QTextCodec类。

看了,还是不行,我把源码粘上,你帮我看一下好吗
回复

使用道具 举报

累计签到:35 天
连续签到:1 天
2015-12-12 09:25:11 显示全部楼层
咬狗的人 发表于 2015-12-12 09:23
看了,还是不行,我把源码粘上,你帮我看一下好吗

//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
class QLabel;
class QLineEdit;
class QPushButton;
class QTextEdit;
class QWidget;
class QProcess;
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
        void tracert();
        void result();
private:
    QLabel *targetLabel;
    QLineEdit *line;
    QPushButton *button;
    QTextEdit *text;
    QWidget *widget;
    QProcess *cmd;
    QString output;
};

#endif // MAINWINDOW_H

回复

使用道具 举报

累计签到:35 天
连续签到:1 天
2015-12-12 09:25:47 显示全部楼层
咬狗的人 发表于 2015-12-12 09:25
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

//mainwindow.cpp
#include "mainwindow.h"
#include <QProcess>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
#include <QHBoxLayout>
#include <QWidget>
#include <QProcess>
#include <QTextCodec>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    targetLabel=new QLabel(tr("target adress:"));
    line=new QLineEdit;
    QHBoxLayout *layout1=new QHBoxLayout;
    layout1->addWidget(targetLabel);
    layout1->addWidget(line);

    button=new QPushButton(tr("tracert"));
    text=new QTextEdit;
    QVBoxLayout *layout2=new QVBoxLayout;
    layout2->addLayout(layout1);
    layout2->addWidget(button);
    layout2->addWidget(text);

    widget=new QWidget;
    widget->setLayout(layout2);
    cmd=new QProcess;
    setCentralWidget(widget);

    connect(button,SIGNAL(clicked(bool)),
                     this,SLOT(tracert()));
    connect(cmd,SIGNAL(readyRead()),
            this,SLOT(result()));
}
void MainWindow::tracert() {
    QString string=line->text();
    cmd->start("tracert "+string);
    output=tr("");
    text->setText(output);
}
void MainWindow::result() {
    output+=cmd->readAll();
    text->setText(output);
}

MainWindow::~MainWindow()
{
    delete targetLabel;
    delete line;
    delete button;
    delete text;
    delete widget;
}
回复

使用道具 举报

累计签到:35 天
连续签到:1 天
2015-12-12 09:26:23 显示全部楼层
//main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char* argv[]){
    QApplication app(argc, argv);
    MainWindow *m=new MainWindow;
    m->show();
    return app.exec();
}
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2015-12-12 19:59:28 显示全部楼层
咬狗的人 发表于 2015-12-12 09:25
//mainwindow.cpp
#include "mainwindow.h"
#include

cmd->readAll();
换成QString::fromLocal8Bit(p.readAllStandardOutput());
回复

使用道具 举报

累计签到:35 天
连续签到:1 天
2015-12-12 20:56:02 显示全部楼层
Syylc120317 发表于 2015-12-12 19:59
cmd->readAll();
换成QString::fromLocal8Bit(p.readAllStandardOutput());

行了,真是太谢谢了,不知道能不能加个好友,以后还想向你请教
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2015-12-12 21:55:52 显示全部楼层
咬狗的人 发表于 2015-12-12 20:56
行了,真是太谢谢了,不知道能不能加个好友,以后还想向你请教

不客气。我天天来论坛。遇到问题,发帖就行。我尽我所能帮忙。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了