Nano Hash - криптовалюты, майнинг, программирование

Различное поведение QWidget в Windows и Linux

QWidget создается через некоторое время в моем приложении. Я запускаю свое приложение. Затем я использую интернет-браузер. В Linux мой новый виджет появляется поверх моего браузера, а в Windows - нет. Виджет имеет родительский виджет. Как это исправить в линуксе?

и родитель, и мой виджет имеют только setFocusPolicy(Qt::StrongFocus); ОС Linux — Xubuntu. И одно отличие в родительском классе:

#if defined(Q_WS_X11) 
   setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); 
#else 
   setWindowFlags(Qt::Window | Qt::FramelessWindowHint); 
#endif
23.01.2014

  • Вы должны указать, какую версию Lunix вы используете, и, возможно, добавить скриншоты и код инициализации вашего виджета. 23.01.2014
  • родитель тоже QWidget. и родитель, и мой виджет имеют только setFocusPolicy(Qt::StrongFocus); ОС Linux — Xubuntu. И одно отличие в родительском классе: #ifdefined(Q_WS_X11) setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); #else setWindowFlags(Qt::Window | Qt::FramelessWindowHint); #endif 23.01.2014

Ответы:


1

Я считаю, что Windows предотвращает кражу фокуса другими программами, в то время как некоторые другие ОС могут не обеспечивать этого.

Когда вы создаете свой виджет, вы должны установить состояние окна прежде чем сделать его видимым. Например

 QWidget* lateWidget = new QWidget(this); // or add to layout or whatever
 lateWidget->setWindowState(this->windowState());
 lateWidget->show();

Изменить:

Из документации:

Виджет, который закрыт другими окнами на экране, считается видимым.

Это означает, что если вы откроете браузер поверх parent, то lateWidget->show() запросит активацию оконной системы. lateWidget которая затем появится поверх и получит фокус мыши и клавиатуры пользователя.

прежде чем показывать lateWidget, нужно использовать быстрое решение

 lateWidget->setAttribute(Qt::WA_ShowWithoutActivating);
23.01.2014
  • Имеет ли это смысл? Он просто хочет lateWidget->setWindowState(Qt::WindowActive) 23.01.2014
  • Я хочу, чтобы виджет не отображался сверху как в Windows, так и в Linux. Я понимаю, что у них одинаковое поведение 24.01.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..