2013-05-23 2 views
1

나는 mdi 영역을 가지고 있습니다. 이미지가 열릴 때마다이 mdiArea에 서브 윈도우를 추가합니다. 각 서브 윈도우에 대해 설정 한 위젯은 QDialog에서 상속 한 imageFileDialog입니다. 이 대화 상자 안에는 스핀 상자가 있습니다. 생성 된 후에 mdiArea에있는 모든 대화 상자에 대해이 스핀 상자의 값을 설정할 수 있기를 원합니다. 대화 상자를 반복하는 방법을 모르겠습니다. 나는 이것을하는 방법을 생각하려고 노력했다. 나는 인 QDialog에서 상속 내 imageFileDialog 클래스로 위젯을 캐스팅 할 수 없기 때문에mdiarea 하위 창을 반복합니다.

for (int j=0; j < ui->mdiArea->subWindowList().size(); j++) 
{ 
    imageFileDialog *ifd = ui->mdiArea->subWindowList()[j]->widget(); 
    ifd->setSpinBox(0); 
} 

는하지만 오류가 있습니다.

그래도 난 내 imageFileDialog의 생성시에 연결을 설정할 수 있습니다

imageFileDialog *ifd = new imageFileDialog(); 
ifd->connect(this, SIGNAL(emitImageFileValue(double)), SLOT(ifd->setSpinBox(double))); 
subWindow1->setWidget(ifd); 

그러나 이것은 내가 전에 만들려고 한 모든 연결 다르다. 모든 것이 잘 컴파일되지만 방출 된 신호는 내 슬롯에 도달하지 않습니다. 누군가가 전에 이것을 시도하고 몇 가지 제안을하기를 바라고 있습니다! 미리 감사드립니다.

답변

1

첫 번째 문제에 대한 당신이 SLOT 만 슬롯 이름을 전달하는 데 필요한 두 번째 문제에 대한 사용 qobject_cast 매크로() (없이 ifd->), 또는 별도의 매개 변수로 IFD 포인터를 전달 연결하려면 다음과 같이하십시오.

QObject::connect(this, SIGNAL(emitImageFileValue(double)), idf, SLOT(setSpinBox(double))); 
+0

감사합니다. 만드는 것이 쉬운 변화 였고 매력처럼 작동했습니다. 연결이 끊어지면서 서브 윈도우를 반복하지 않기로 결정했습니다. – user1216527

관련 문제