启用Pattern.UNICODE_CHARACTER_CLASS标志时,我与匹配一些标点符号字符有关。
对于示例代码如下:
final Pattern p = Pattern.compile("\\p{Punct}",Pattern.UNICODE_CHARACTER_CLASS);
final Matcher matcher = p.matcher("+");
System.out.println(matcher.find());
Run Code Online (Sandbox Code Playgroud)
尽管文档中明确指出p {Punct}包含!! ##%&'()* +,-。/ :; <=>?@ [] ^ _`{| }〜
除“ +”号外,后面的字符$ + <=> ^`|〜也会发生相同的问题。
删除Pattern.UNICODE_CHARACTER_CLASS后,它可以正常工作
我将对这个问题有任何提示
我正在使用Qt,我想做的是在Windows系统托盘中的图标上显示自定义弹出窗口。我可以通过使用screengeometry()和availableGeometry()之间的差异,使用geometry()和任务栏高度来获取图标坐标。因此,可以正确分配弹出窗口,并且对于不同的任务栏方向,该弹出窗口不会与任务栏重叠(例如,当任务栏位于屏幕左侧或屏幕顶部时)。
当打开任务栏的自动隐藏功能时问题开始,然后显然availableGeometry返回与screenGeometry相同的值,而我再也找不到任务栏的高度了。这将导致弹出窗口与任务栏重叠,甚至显示在错误的位置。
我的问题是:启用自动隐藏后,如何在Windows中正确检测任务栏的方向和大小?我应该使用某些winapi函数,还是可以仅在Qt中(最好)使用它?
目前,我需要在C ++ / Qt中检测设置为“自动隐藏”的任务栏在屏幕上是否可见。我已经尝试了以下解决方案,但是没有成功:
使用uState =(UINT)SHAppBarMessage(ABM_GETSTATE,pabd)检查自动隐藏状态,这仅返回是否设置了自动隐藏属性
使用SystemParametersInfo(SPI_GETWORKAREA,0,&rectWorkArea,0)获取工作区;不幸的是,当任务栏设置为“自动隐藏”时,工作区始终是整个屏幕的大小,即使它实际上在屏幕上可见
使用SHAppBarMessage(ABM_GETTASKBARPOS,&abd);获取AppBarData;使用此功能,我可以同时获取任务栏的大小和坐标,但是,即使隐藏了任务栏,也总是将其返回,就好像任务栏是可见的一样。
因此,使用这些方法我无法分辨,是否在给定的时间在屏幕上显示了启用“自动隐藏”的任务栏:-(
我将不胜感激任何帮助 :-)