0

わかりましたので、qt-C++ プログラムを使用してホスト システムから SBC6845 にあるプログラム./led.shを実行しています。このプログラムは基本的に、SBC をホスト システムに接続します。「ハイパーターミナル」または「Minicom」に相当します。http://code.google.com/p/qextserialport/から「qextserialport-1.2rc.zip」内のこのプログラム (サンプル コード)「uartassistant」を取得しました。

このリンクに出くわしました: QTプログラム内からシェル コマンドを実行する方法を検索しているときに、ubuntu の QT c++ でシェル コマンドを実行しています。./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でLEDフラッシュを行うことができました。

しかし、 ./led.sh を停止しようとすると問題が発生し、uartassistantで停止できません (バグ、変更が必要、まだ機能しています)。しかし、当分の間、別の pushbutton_1 を作成し、「Ctrl+Z」のようなものを中に入れて、 . /led.shに停止を依頼しようとしています。評判ポイントが低いために配置できない他のリンクに出くわしました。qtアプリ内で[他のリンクから] SIGTERM / killオプションを使用し、プッシュボタンのクリックで実行する方法がわかりません。killを使用した場合、そのような複数のプッシュボタン アクションのpidofをどのように判断し、誰を殺すかを割り当てるとします。

また、私の SBC には灰 [Almquist shell] があることを付け加えたいと思います。したがって、これは Bourne シェルの低メモリ クローンであり、 led.shを終了するための通常のコマンドをサポートするかどうかはわかりません。

4

2 に答える 2

1

qtアプリ内で[他のリンクから] SIGTERM / killオプションを使用し、プッシュボタンのクリックで実行する方法がわかりません。

多くの場合と同様に、Qt は直感的な抽象化を提供するため、これについて心配する必要はありません。つまり、QProcessです。あなたの場合、次のようなものが必要です:

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

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

ここでの最初の回答には、より複雑なシェル コマンドを実行するための他の手法がいくつかあります。

于 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);}

ここでの 5 番目の返信で、その考えが浮かびました。方法はわかりませんが、うまくいったので、誰かがもっとうまく説明できるかもしれません。

于 2013-04-04T08:42:32.547 に答える