gpt4 book ai didi

c++ - C++ 中的 GTK : Changing a Label based on console input

转载 作者:行者123 更新时间:2023-11-30 05:29:04 25 4
gpt4 key购买 nike

为了证明我的意思,我写了这段代码,没有大部分 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 的东西来脱离 main,但是这显然已被弃用,所以我尽量不使用它。

输入必须由不是 gtk_main() 的线程读取,因为输入不是来自 GUI。实际上,它将是一个插入 beaglebone black 的设备,但我认为这是一个更简单的类似情况。

将使用的实际输入方法是 1) 指纹传感器,它根据通过 UART channel 发送和接收的字节执行操作,以及 2) 在运行的 BeagleBone Black 上使用 OpenCV 方法的 USB 摄像头和面部识别脚本Debian,与笔记本电脑联网以执行密集的 opencv 工作。目前我只是想让它与 FP 传感器一起使用。通过我们的接口(interface),我们可以调用 FP 传感器方法,该方法返回一个 int,并根据该 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);

基本上,我们正在尝试使用实际的 GUI 框架而不是 imshow(),并且由于 OpenCV,设备已经有了 GTK,所以坚持使用 GTK 会很好。这个控制台问题试图弄清楚如何在简单的上下文中用 gtk 窗口的标签更改替换 imshow()。

最佳答案

我想你要找的是 Glib IO Channel .如果将其绑定(bind)到标准输入文件描述符,则在用户按下回车键时会触发信号。然后你应该能够使用 cin 来获取文本。

如果您的目的是获取某种类型的密码,您可以考虑使用 using a dialog捕获用户输入。

关于c++ - C++ 中的 GTK : Changing a Label based on console input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36556773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com