How do I show a window without making it 'active' or giving it 'focus'. If I understand correctly: - a widget may be 'active' in which case it is drawn differently, for example an 'active' QTextEdit has a blinking cursor. - a widget may have 'focus' in which case it is the recipient of keyboard events.
These two flags are completely independent and it is possible for a widget to have any combination of these two flags, however many functions will set both together. Even parts of the documentation appear to blur the distinction between the two. I want to show a hidden window without either of these two flags, regardless of how the flags were set the last time the window was visible. So far I have the following test case which toggles the visibility of a dialog every second. [[[code]]] #include <QtWidgets> int main(int argc, char *argv[]) { QApplication a(argc, argv); QDialog dialog(0, Qt::WindowStaysOnTopHint); QTextEdit edit(&dialog); // This prevents Qt from activating the window // but does not help if the user activates the // window manually (by clicking it). dialog.setAttribute(Qt::WA_ShowWithoutActivating); auto timer = new QTimer; QObject::connect(timer, &QTimer::timeout, [&]() { dialog.setVisible(!dialog.isVisible()); } ); timer->start(1000); return a.exec(); } [[[/code]]] This code satisfies the no-focus requirement but fails the no-activate requirement because it never 'deactivates' the widget. This means that if the user ever activates the QTextEdit manually (by clicking it while it's visible) then the QTextEdit will remain 'active' for all subsequent setVisible(true). How can I modify this code to satisfy both requirements? _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest