여러 qt 응용 프로그램을 컨테이너로만 작동하는 다른 응용 프로그램에 포함하려고합니다.qt 응용 프로그램 내에서 qt 응용 프로그램 실행
응용 프로그램 컨테이너 컨테이너에 전화를 수 있습니다 및 하나 개의 실행 형태의 용기 유틸리티
용기에서 나는 QTabWidget를 가지고 있고,이 QTabWidget 안에 내가있다 (I 리눅스를 사용하고 있습니다) utility1Widget이라는 위젯이있는 탭.
유틸리티 유틸리티 1 위젯의 GUI를보고 싶습니다.
편집 2 : 초기 접근 방식이 잘못되었으므로 나중에 참조 할 수 있도록 노력하겠습니다. 그러나 실제로 구현 된 방법은 분리 된 대답입니다.
나는 utility1Widget의 WID를 얻을 성공없이 시도하고 유틸리티의 시작 시간에 인수로 보내야합니다, 뭔가 같은 다음 utility1Widget를 결과로
utility.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
int containerWinId;
QWidget *parent=NULL;
if(argc==2) {
containerWinId=atoi(argv[1]);
parent = QWidget::find(containerWinId);
}
MarinaWindowClient w(parent);
w.show();
printf("Starting client window. Do you see something?\r\n");
fflush(stdout);
return a.exec();
}
비어 있지만 유틸리티 GUI는 아무 데나 나타나지 않습니다.
유틸리티 프로세스는이 방법으로 컨테이너에서 시작됩니다 :
mainContainer.cpp
을marinaContainer::mainContainer(QWidget *parent) :
QWidget(parent),
ui(new Ui::mainContainer)
{
ui->setupUi(this);
WId myWinId=ui->utility1Widget->winId();
char cmd[1000];
sprintf(cmd," %d",myWinId);
QProcess *myProcess = new QProcess(this);
myProcess->start("utility1", QStringList(cmd));
printf("Client started\r\n");
fflush(stdout);
}
감사합니다 !!!!
편집 한 내가 찾기 기능의 결과를 검사하는 부모 변수를 추가하고, 내가 가진 첫 번째 문제는 내가 유틸리티에서, 컨테이너 위젯 ID를 얻을 수 있다는 것입니다 그래서, NULL이다.
이 [링크] (http://stackoverflow.com/questions/17319853/can-qwidgetfind-find-widgets-from-a-different-process)에 따르면 내 접근 방식은 찾기가 쉽지 않으므로 찾기가 쉽지 않습니다. 로컬 윈도우 ids ' – Mquinteiro
네이티브 윈도우 ID를 가지고 있다면 ['QWidget :: createWindowContainer'] (http://doc.qt.io/qt-5/qwidget.html#createWindowContainer)와 ['QWindow :: fromWinId'] (http://doc.qt.io/qt-5/qwindow.html#fromWinId). –
어떤 버전의 Qt를 사용하고 있습니까? –