【发布时间】:2015-04-22 13:17:09
【问题描述】:
我有一个类,它是 QDialog 的子类,而不覆盖 exec()、accept() 或 reject() 以及另一个类,它在其 mousePaintEvent 中调用 Dialog 类:
void Canvas::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton){
if (dialog->isVisible()){
dialog->setModal(true);
dialog->move(QWidget::mapToGlobal(event->pos()));
//I connect the dialog's accepted signal to the CallingClass's slot, that uses the information taken from the dialog
connect(dialog, &Dialog::accepted, this, &CallingClass::slot);
dialog->exec();
}
}
if (dialog->isVisible()){
if (dialog->rect().contains(event->pos())){
dialog->reject();
}
}
}
我尝试使用对话框的存在性进行检查,但delete 并没有真正起作用(我将它放在 dialog.reject() 之后),我什至尝试使用布尔值,我再次将其设置为 false在最后一个 if 中的 dialog.reject() 之后,但我开始认为,在 .reject() 之后没有任何作用。我该如何进行?
【问题讨论】:
-
从高层次上讲,您实际上想做什么?
-
这是“Canvas”(QOpenGlWidget)的绘制事件。我想要做的是在鼠标左键单击时打开一个对话框,我可以从中选择要在画布上绘制的内容,并且,当对话框打开时,我希望能够通过单击它外部来关闭它。
标签: c++ qt qdialog qmouseevent