我有一個QWidget
衍生物(NewPayment
)的問題。這是一個簡單的窗口,有一些控件和QDialogButtonBox
。它有2個插槽:QWidget的不打烊 - 只剩下空空的窗口
void NewPayment::on_buttonBox_accepted() {
//(some action going in here)
this->close();
}
void NewPayment::on_buttonBox_rejected() {
this->close();
}
當我單擊確定或取消 - 插槽按預期觸發。問題是,該窗口不會關閉。所有的內容消失,並留下一個空的窗口(窗口標題是左)。
小部件存在的MDISubwindow,並創建像這樣:
void HurBudClientGUI::addNewPayment(int direction, int contractorid) {
foreach(QMdiSubWindow* it, this->ui.mainArea->subWindowList()) {
if (NewPayment* np = qobject_cast<NewPayment*>(it->widget()) ) {
if (np->getContractorID() == contractorid) {
this->ui.mainArea->setActiveSubWindow(it);
return;
}
}
}
NewPayment* np = new NewPayment(direction, contractorid, this);
np->setAttribute(Qt::WA_DeleteOnClose);
this->ui.mainArea->addSubWindow(np);
np->show();
}
有趣的是,當我要麼:
- 點擊在TRE右上角的「X」角落
- 呼叫
QMdiArea::closeActiveSubWindow()
從主窗口 - 從主窗口調用
QMdiArea::closeAllSubWindows()
窗口被正常關閉。我已經覆蓋一個QWidget::closeEvent(QCloseEvent * event)
我的課:
void NewPayment::closeEvent(QCloseEvent * event) {
qDebug() << "[" << __FUNCTION__ << "]:" << "event: " << event << "; sender:" << sender();
}
而且很多preety顯示了同樣的事件,每次 - 無論我怎樣嘗試關閉它:
[ NewPayment::closeEvent ]: event: QCloseEvent(Close, 0x40bd64, type = 19) ; sender: QDialogButtonBox(0x4dfa7a8, name = "buttonBox") // I hit cancel
[ NewPayment::closeEvent ]: event: QCloseEvent(Close, 0x40b634, type = 19) ; sender: QObject(0x0) // I hit the 'X' in the window corner
[ NewPayment::closeEvent ]: event: QCloseEvent(Close, 0x40b468, type = 19) ; sender: QObject(0x0) // I hit "close active sub window" from parent window
[ NewPayment::closeEvent ]: event: QCloseEvent(Close, 0x40b454, type = 19) ; sender: QObject(0x0) // I hit "close all sub windows" from parent window
最好的部分是,當我點擊「取消」(窗口被清除,但保持打開狀態),然後點擊「X」或其他 - 窗口關閉,但控制不通過我的NewPayment::closeEvent
(我有一個剎車點 - 它不火) 。
它的工作原理preety很多在其他窗口一樣。奇怪的是,我很確定它以前(+ - 一週前)對其他窗口(它們在單擊確定螞蟻執行所有必要的操作後關閉)工作。我想我會結束從SVN analyzyig差異,但也許有人有類似的問題?我最近睡得很少,所以也許我錯過了一些微不足道的東西?
我會很感激任何幫助。
謝謝。我遵循你的方式,並實現我所需要的 – murison 2015-04-01 17:28:40