我想写一个类似QDialog的类。我已经很好地过滤掉了非对话窗口小部件的鼠标事件,但是我仍然有一个关于焦点的问题。由于QDialog lookalike类只是一个常见的小部件,因此它可能会因为按键(制表符)而失去焦点。因此,与QDialog外观无关的小部件,我不能点击,但可以聚焦的小部件,可能会获得焦点。有没有一种巧妙的方法可以防止用户把注意力从我的对话框外观相似的子部件上移开?
发布于 2012-08-26 19:38:52
这里有一个解决方案:
// somewhere in your code
connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
SLOT(focusChanged(QWidget*,QWidget*)));
void MyDialog::focusChanged(QWidget*, QWidget* to)
{
if (!isAncestorOf(to))
{
QWidget* widget(qobject_cast<QWidget*>(children().front()));
widget->setFocus(Qt::OtherFocusReason);
QKeyEvent event(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
qApp->sendEvent(widget, &event);
}
// else do nothing
}假定子对象是QFrame或QWidget的实例。
发布于 2012-07-18 01:29:17
假设您的类似QDialog的小部件是一个单独的窗口,我认为您正在寻找QWdiget::setModal( true )。它阻止应用程序的其他窗口中的小部件接收任何输入事件。
https://stackoverflow.com/questions/11527407
复制相似问题