我得到了程序的工作。下面是代码。
主窗口.hpp
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QtGui>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:
void outlogtext(QString ver);
private slots:
void outlog();
void on_pushButton_24_clicked();
private:
QPushButton* pushButton_24;
QLineEdit* lineEdit_4;
QProcess *myprocess;
};
#endif // MAINWINDOW_HPP
主文件
#include <QtCore>
#include <QtGui>
#include <QDebug>
#include "mainwindow.hpp"
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
{
pushButton_24 = new QPushButton;
connect(pushButton_24, SIGNAL(clicked()),
this, SLOT(on_pushButton_24_clicked()));
lineEdit_4 = new QLineEdit;
QWidget* central = new QWidget;
QLayout* layout = new QVBoxLayout();
layout->addWidget(pushButton_24);
layout->addWidget(lineEdit_4);
central->setLayout(layout);
setCentralWidget(central);
}
MainWindow::~MainWindow()
{
}
void MainWindow::on_pushButton_24_clicked()
{
myprocess = new QProcess(this);
connect(myprocess, SIGNAL(readyReadStandardOutput()),
this, SLOT(outlog()));
myprocess->start("./helloworld.exe");
// For debugging: Wait until the process has finished.
myprocess->waitForFinished();
qDebug() << "myprocess error code:" << myprocess->error();
}
void MainWindow::outlog()
{
QString abc = myprocess->readAllStandardOutput();
emit outlogtext(abc);
lineEdit_4->setText(abc);
}
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow win;
win.show();
return app.exec();
}
你好世界.cpp
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}
我改变了一些事情:
在构造一个对象之后,我总是在对对象执行实际操作之前连接信号和槽,这可能是调用show()
小部件或调用
start()
线程。所以我可以确定我不会错过一个信号started()
,例如。
我在 Linux 上运行该程序。在那里,我必须确保它helloworld.exe
在我的路径上,然后我将命令更改为./helloworld.exe
. files
我没有创建您的示例中调用的子目录。
Qt 中用于分隔目录的字符是斜杠/
。当您想向用户显示某些内容时,有一些特殊的函数可以在 Qt 样式和本机样式之间进行转换。在内部总是使用斜线。这甚至适用于 Windows 程序(许多控制台命令也可以处理斜杠而不是反斜杠)。
添加调试输出在开发过程中非常非常有价值。如果 Makefile 设置不正确或出现问题,则helloworld.exe
可能会出现在预期之外的目录中。因此,我添加了代码以等待一段时间,直到该过程完成。这并没有什么坏处,因为helloworld.exe
只需要几毫秒即可运行。之后,我打印错误代码QProcess
只是为了确保程序已被找到并且可以执行。所以我可以确定可执行文件在我的路径上,设置了可执行标志,我有权执行文件等。
我不知道究竟是什么原因导致您的机器出现问题。但是,将您的解决方案与我的解决方案进行比较,查看错误代码QProcess
并在插槽内设置断点应该可以帮助您找到错误。