に基づいてラベルを変更し、私はGTKの混乱の中で最もせずにこのコードを書いた:GTK:私が何を意味するか示すためにコンソール入力
//more gtk declaration stuff above
int access;
access = 0;
int tries;
tries = 0;
string input;
input = "";
string code;
code = "";
while(access != 1 && tries < 4){
directions((gpointer)lbl); //change label to "type 'finger'"
cin >> input;
if(input.compare("finger") = 0){
while(code.compare("1") != 0 && tries < 4){
fpcheck((gpointer)lbl); //change label "Enter the secret code ('1')"
cin >> code;
if(code.compare("1") != 0){
retry((gpointer) lbl);//change label "Try again!"
tries ++;
}
else{
fprecog((gpointer) lbl); //change label "Recognized!"
access = 1;
}
}
}
}
if(access = 1)
//change label "Access Granted!"
else
//change label "No access."
gtk_main();
return 0;
明らかにこれはまさに(gtk_mainいるため、動作しません。 )は最後まで呼び出されません。コンソールのものはうまく動作しますが、ウィンドウが最後までポップアップしないので、ユーザーは何をすべきか分からず、gtk_main()を早期に置くと、プログラムはgtk_main()ループでスタックされます何も起こりません。
この種のフローは、通常GTKでどのように達成されますか?私はメインから抜け出すためにいくつかのgtk_threadを試しましたが、それは明らかに廃止されているので、私はそれを使わないようにしています。
入力はGUIからのものではないので、入力はgtk_main()ではないスレッドによって読み取られなければなりません。実際には、それはビーグルボーンブラックに差し込まれたデバイスになりますが、これはより単純な同様の状況だと私は思う。
使用される実際の入力方法は、1)UARTチャネルを介して送信されたバイトと受信されたバイトに基づいてアクションを実行するフィンガープリントセンサー、2)BeagleBone BlackでOpenCVメソッドを使用するUSBカメラと顔認識スクリプトDebianを実行して、ラップトップにネットワーク接続して、集中的なopencvを実行します。今のところ私はFPセンサーでそれを取得しようとしています。私たちのインターフェースでは、intを返すFPセンサーメソッドを呼び出すことができ、そのintに応じて何かをすることができます。
返されるintに応じてGTKラベルを変更してから、ラベルが表示された後に別のメソッドを呼び出す必要があります。ここで
は、私のようなルックスと統合しようとしているどのようなコードの抜粋です:while(key != 'x')
{
imshow("main_display", welcome);
key = waitKey(1); //poll keyboard at active screen
//key = getkey(); //TODO: poll from TFT instead
switch(key)
{
case 'i': //Identify User
imshow("main_display", press_finger);
waitKey(1);
printf("\n---IDENTIFY USER---\n");
post_log(1, 0);
do_reg = true;
Ret = GT_LED_On(LS);
printf("\nPress Finger");
//something to force console text before loop starts...?
Timer.InitTimer();
while(GT_IsPressFinger(LS) == 0 && ((Timer.ElapsedTime_ms() < TIMEOUT))) {}
if(Timer.ElapsedTime_ms() >= TIMEOUT)
{
printf("\nCapture TIMEOUT\n");
Ret = GT_LED_Off(LS);
post_log(6, user_id);
imshow("main_display", fps_timeout);
waitKey(1000);
do_reg = false;
break; //??????????????????????????? GOTO???
}
printf("\nCapturing...Standby...\n");
imshow("main_display", hold_finger);
waitKey(1);
Ret = GT_CaptureFinger(LS, 0);
基本的に代わりのimshowを()私たちは、実際のGUIフレームワークを使用しよう、としているデバイスからすでにOpenCVのためにGTKが登場していますが、GTKを守るのが良いでしょう。このコンソールの質問は、単純なコンテキストでimshow()をgtkウィンドウのラベル変更に置き換える方法を理解しようとしています。
GUIプログラムのCLIデータ入力のポイントは何ですか? – oldtechaa
ここでのCLIは、より堅牢な設定をテストしています。元の質問では、単純化するために光沢を付けましたが、詳細を追加します。 – Will