2012-12-22 2 views
0

다른 윈도우를 호출하는 Qt 메인 윈도우가 있습니다. 실제로는 첫 번째 윈도우에 대한 매개 변수를 포함하는 서브 메뉴 종류입니다. 여기 메인 윈도우의 일부입니다 : 당신이 볼 수 있듯이Qt - 신호/슬롯이있는 서브 메뉴 닫기

void Ui_MainWindow::createSignals() 
{ 
    connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(ICMenu())); 
} 

void Ui_MainWindow::ICMenu() 
{ 
qmenu = new QMainWindow; 
DiskMenu = new Ui_DiskGalMenu; 
DiskMenu->setupUi(qmenu,this); 
setInitialDiskMenuPosition(qmenu, this); 
qmenu->show(); 
} 

, 나는 또 다른 QMainwindow ("qmenu")을 호출;

void Ui_DiskGalMenu::createMenuSignals() 
{ 
    connect(pushButton_4, SIGNAL(clicked()), this, SLOT(closeMenu()));  
} 

void Ui_DiskGalMenu::closeMenu() 
{ 
close(true); 
} 

이 하위 메뉴에서 매개 변수를 설정 한 후, 내가 (여기 "pushButton_4") 푸시 버튼으로 닫습니다 싶습니다 : 여기 (유형이 "Ui_DiskGalMenu"입니다)이 새로운 윈도우의 코드가있다.

내 문제는 "pushButton_4"를 클릭하면이 창이 닫히지 않는다는 것입니다.

나는 또한 closeEvent을 다시 구현하려고 시도했지만 성공하지는 못했습니다.

어떤 도움을

답변

0

이 함수 호출이 실수처럼 보이는 좋은 것 :

close(true); 

는 QWidget이 :: close()를 매개 변수를 고려하지 않습니다. 그래서 여기 무슨 일을하는지, C 라이브러리의 close (INT) 함수를 호출 당신이 전화로 끝날 수 있도록 bool는 암시 적으로, int으로 변환됩니다 (파일 기술자를 닫는.) :

::close(1); 

을 어느 (아마) 폐점 시간은 stderr입니다.

당신이 위의 내용을 변경하는 경우 당신은 무슨 일이 일어나고 있는지 볼 수 있습니다 : 이러한 기능이 존재하지 않기 때문에 당신은 컴파일 오류가 발생한다

this->close(true); 

. 그래서 올바른 호출했을 것이다 : 당신이 전혀 Ui_DiskGalMenu :: closeMenu() 함수를 필요가 없습니다

this->close(); 

그러나,()는 QWidget :: 가까운, 이미 슬롯입니다. 창을 닫을 때 더 많은 물건을 할 필요가 있다면

connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(close())); 

, 당신은 closeEvent을 무시할 수 있습니다() 윈도우가 종료되기 전에 호출 될 것이다 : 당신이 close()를 슬롯에 연결되어 필요로하는 것은으로 시작합니다.