gpt4 book ai didi

c++ - Mac 中的通知窗口。有或没有 Qt

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:42 26 4
gpt4 key购买 nike

Mac OS X 上的 Qt 项目。我需要在顶部显示通知窗口而不窃取任何事件应用程序的焦点。

这里是小部件构造函数部分:

setWindowFlags(
Qt::FramelessWindowHint |
Qt::WindowSystemMenuHint |
Qt::Tool |
Qt::WindowStaysOnTopHint
);
setAttribute(Qt::WA_TranslucentBackground);

Qt::WA_ShowWithoutActivating没有任何影响。

有办法吗?我已准备好在那里实现原生 Carbon/Cocoa 解决方案,但首选 Qt。或者我的 Mac 哲学是错误的,我应该以另一种方式通知用户?

更新 Growl 在其通知中不支持编辑行,是吗?

最佳答案

我做到了!

#ifdef Q_OS_MAC
#include <Carbon/Carbon.h>
#endif

NotifyWindow::NotifyWindow() : QWidget(0 /* This zero is the first point */) {

setWindowFlags(
#ifdef Q_OS_MAC
Qt::SubWindow | // This type flag is the second point
#else
Qt::Tool |
#endif
Qt::FramelessWindowHint |
Qt::WindowSystemMenuHint |
Qt::WindowStaysOnTopHint
);
setAttribute(Qt::WA_TranslucentBackground);

// And this conditional block is the third point
#ifdef Q_OS_MAC
winId(); // This call creates the OS window ID itself.
// qt_mac_window_for() doesn't

int setAttr[] = {
kHIWindowBitDoesNotHide, // Shows window even when app is hidden

kHIWindowBitDoesNotCycle, // Not sure if required, but not bad

kHIWindowBitNoShadow, // Keep this if you have your own design
// with cross-platform drawn shadows
0 };
int clearAttr[] = { 0 };
HIWindowChangeAttributes(qt_mac_window_for(this), setAttr, clearAttr);
#endif
}

我们获得了与 Windows 中几乎相同的良好行为:

  • 它不会偷走表演的焦点。 (通过互联网搜索两周)
  • 那里的控件会处理第一次用户点击,而其他窗口则需要额外点击才能激活。
  • 当窗口被激活时,同一应用程序的其他窗口,不要冒泡到最前面。
  • 还有一个小问题remains ,但至少它有一个简单的解决方法。甚至可以留下。

关于c++ - Mac 中的通知窗口。有或没有 Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5823700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com