QT 에서 QProcess 를 사용 하여 adb 명령 을 호출 하여 원 격 제어 완료 첫날

2203 단어 qtAndroid
최신 작업 을 받 았 습 니 다.QT 인터페이스 를 사용 하여 ADB 명령 을 통합 합 니 다.dos 내부 에 adb 셸 과 다른 명령 을 입력 하 는 것 이 너무 번 거 로 우 므 로 시각 화 도 구 를 만 드 는 데 도움 이 될 것 입 니 다.
QT 인터페이스 제작 이 빠 르 고 플랫폼 을 뛰 어 넘 기 때문에 개발 도구 로 QT 를 선택 하고 외부 명령 으로 QProcess 류 를 사용 합 니 다.
이 모든 것 은 매우 빨리 완성 된다.
QProcess *process = new QProcess(this);
process->start("adb devices");
QString str = QString::fromLocal8Bit(process->readAll());
ui->currentDeviceName->setText(str);

그러나 인터페이스 에 있 는 문 자 는 표시 되 지 않 았 습 니 다.자 료 를 찾 아 보 세 요.어떤 자 료 는 start 가 비동기 이 고 execute 는 동기 화 이 며 비동기 일 때 신호 슬롯 을 설정 해 야 합 니 다.설정 한 후에 도 표시 되 지 않 았 습 니 다.execute 라 는 동기 화 방법 을 호출 한 후에 도 결과 가 나타 나 지 않 았 습 니 다.
한 시간 넘 게 생각 한 끝 에 원인(개인 적 인 관점)을 찾 았 습 니 다.제 adb 는 환경 변 수 를 설 정 했 지만 E 판 아래 에서 adb 명령 을 호출 할 때 adb 의 경 로 를 지정 하지 않 았 습 니 다.dos 의 cmd 에서 adb devices 를 호출 하 는 것 은 문제 가 없 지만 QProcess 에서 경 로 를 밝 혀 야 합 니 다.adb 가 현재 프로젝트 디 렉 터 리 에 있 지 않 는 한.
솔 루 션:adb.exe 를 C:\Windows\SysWOW 64 아래(64 비트 운영 체제)로 복사 하면 됩 니 다.
실행 할 때 1-2 초가 걸 리 기 때문에 타이머 QTimer 를 설정 해 야 합 니 다.다음 과 같 습 니 다(첫 번 째 방법).
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(onSearchFinished()));
timer->start(1000);
onSearchFinished SLOT:
this->repaint();
ui->currentDeviceName->clear();
QString str = QString::fromLocal8Bit(process->readAll());
qDebug()<currentDeviceName->setText(str);
ui->currentDeviceName->setStyleSheet("color:red;");
timer->stop();

필요 에 따라 스스로 개조 하면 된다.생각 은 명령 이 실 행 된 후에 결 과 를 얻 은 후에 화면 을 업데이트 하 는 것 이다.사실 QProcess 내부 에 finished 라 는 신호 가 정의 되 어 있 지만 이것 은 검색 자 료 를 통 해 얻 은 답 이다.다음 과 같다(두 번 째 방법).
   process->start("adb devices");
   connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(onSearchFinished(int,QProcess::ExitStatus)));

이곳 의 onSearch Finished SLOT 는 위 와 기본적으로 일치 하지만 매개 변수 만 다 릅 니 다.
PS:디 테 일이 중요 합 니 다.adb devices 결 과 는 label 을 사 용 했 습 니 다.이 label 은 매우 작 습 니 다.process->readAll()이 얻 은 정보의 첫 번 째 문 자 는 줄 바 꿈 문자 입 니 다.이렇게 되면 label 에는 아무런 내용 도 표시 되 지 않 습 니 다.제 가 앞에서 str 를 인쇄 하지 않 았 다 면 명령 으로 잘못 되 었 습 니 다!!그래서 label 의 크기 를 조정 하거나 읽 은 정 보 를 처리 해 야 합 니 다!!

좋은 웹페이지 즐겨찾기