0

好的,所以我正在使用 qt-C++ 程序从我的主机系统执行我的 SBC6845 中存在的程序./led.sh 。该程序基本上将我的 SBC 连接到我的主机系统。它相当于“超级终端”或“Minicom”。我从http://code.google.com/p/qextserialport/在“qextserialport-1.2rc.zip”中获得了这个程序(示例代码)“uartassistant” 。

我遇到了这个链接:Running shell command in QT c++ in ubuntu,同时搜索如何从 qt 程序内部执行 shell 命令。我尝试并成功执行了 ./led.sh。感谢链接。

我宣布

void someaction(); // in the dialog.h

然后在 dialog.cpp 我添加这个

connect(ui->pushButton, SIGNAL(clicked()), SLOT(someaction()));

还有这个

void Dialog::someaction() {

QString command = "sh ./led.sh\r\n"; const char* command2;
command2 = command.toLocal8Bit().data(); port->write(command2);

我能够在我的 SBC 中进行 ledflash。

但是当我尝试停止./led.sh时出现问题,我无法在 uartassistant 中这样做(错误,需要修改,仍在工作)。但目前我正在尝试制作另一个 pushbutton_1 并在其中放入类似“Ctrl+Z”的内容并要求./led.sh停止。我遇到了一些其他链接,由于声誉点低,我无法放置这些链接。我不知道如何在 qt 应用程序中使用 SIGTERM / kill 选项[来自其他链接] 并在按钮单击时执行。假设我使用kill我将如何确定多个此类按钮操作的pidof并分配要杀死的人。

另外我想补充一点,我的 SBC 有灰 [Almquist shell]。所以它是 Bourne shell 的低内存克隆,我不知道它是否支持退出led.sh的正常命令。

4

2 回答 2

1

我不知道如何在 qt 应用程序中使用 SIGTERM / kill 选项[来自其他链接] 并在按钮单击时执行。

和很多东西一样,Qt 为您提供了一个直观的抽象,让您不必担心任何这些,即QProcess。在你的情况下,你想要这样的东西:

QProcess proc;
proc.start("led.sh");
...

//handle Ctrl-Z event
proc.close();

这里的第一个答案还有其他几种用于执行更复杂的 shell 命令的技术。

于 2013-04-02T15:08:23.357 回答
0

我为我的问题找到了一个临时解决方案。我还没有尝试qprocess操作。

在 dialog.h 我添加了另一个函数:

void someotheraction();

然后在 dialog.cpp 我这样做了:

connect(ui->pushButton_2,SIGNAL(clicked()), SLOT(someotheraction()));

还有这个:

void Dialog::someotheraction()
{
  QString command = "\x001a \r\n"; const char* command2; // Ctrl-Z = \x001a
  command2 = command.toLocal8Bit().data();
  port->write(command2);}

这里的第五个回复给了我这个想法。我不知道如何,但它完成了这项工作,也许有人可以更好地解释它。

于 2013-04-04T08:42:32.547 回答