请教:QDialog如何屏蔽系统菜单!!急用

shen_wei 2012-04-17 12:18:41
QDialog 如何才能屏蔽,标题栏的右键菜单

让鼠标右键时,这个系统菜单不显示出来!

用 mousePressEvent(QMouseEvent *event)
这个好像只能获取Dialog的中间区域的鼠标事件,不能获取标题栏区域的鼠标事件!!

怎么才能屏蔽整个Dialog界面的鼠标事件??

问题1 屏蔽系统菜单。。
问题2 屏蔽整个Dialog右键事件
...全文
640 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiachm 2012-04-20
  • 打赏
  • 举报
回复
看看这个帖子吧http://topic.csdn.net/u/20120419/16/4b5be853-61a5-4dc5-b0ae-1f2f836a47c8.html?31919
dinjay 2012-04-20
  • 打赏
  • 举报
回复
做一张背景图,带关闭按钮的,然后在paintevent里把这个背景图画上去,增加点击判断是否在关闭按钮那个区域就可以了。
shen_wei 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

我记得MainWindow的那个示例好像有关于自定义标题栏的,你去看看
[/Quote]
Qt 例子里面没自绘的。。。
shen_wei 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

原来楼主是在Linux下,这可能会比较麻烦,窗口管理器似乎没有提供这种能力。楼主只能隐藏掉整个标题栏,然后再手工添加一个自己的标题栏上去。

但,为什么要这样呢?

系统菜单的作用是为了确保窗口的行为一致性,我们可以看到除了最大最小之类的功能,它还能调整工作区,这对Linux软件来讲显得尤为重要。去掉这种能力会让你的软件与其它软件格格不入。我很少见在Linux下与窗口管理器对着干的。
……
[/Quote]
那这个要想禁止 ,是不是不可能了??还是没有其他办法。。Xp下这个是可以禁止的!!难道linux中Qt就不能了吗???
shen_wei 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

右键菜单好像是contextMenuEvent。。你看看能不能过滤这个吧。。不知道有没有帮助。、。。
[/Quote]
这个只能是标准控件的。。。对于系统的不起作用(标题栏右键就无效,标题栏也不能获取左右键事件)。。。
myseemydog 2012-04-18
  • 打赏
  • 举报
回复
右键菜单好像是contextMenuEvent。。你看看能不能过滤这个吧。。不知道有没有帮助。、。。
xiachm 2012-04-18
  • 打赏
  • 举报
回复
原来楼主是在Linux下,这可能会比较麻烦,窗口管理器似乎没有提供这种能力。楼主只能隐藏掉整个标题栏,然后再手工添加一个自己的标题栏上去。

但,为什么要这样呢?

系统菜单的作用是为了确保窗口的行为一致性,我们可以看到除了最大最小之类的功能,它还能调整工作区,这对Linux软件来讲显得尤为重要。去掉这种能力会让你的软件与其它软件格格不入。我很少见在Linux下与窗口管理器对着干的。

另外,最重要的是,如果你的软件不是在Gnome下运行呢?例如在KDE下运行时,窗口管理器和Gnome的完全不同,它们放给你的控制能力和API也完全不同,还有更多的窗口管理器…………

这也就是为什么Qt对Linux下的窗口外观支持的很弱的原因。
shen_wei 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

问题1 屏蔽系统菜单。。
问题2 屏蔽整个Dialog右键事件

这两个怎么实现。。才是关键!!!
[/Quote]
请教高人来解答了。。。。
xiachm 2012-04-18
  • 打赏
  • 举报
回复
我记得MainWindow的那个示例好像有关于自定义标题栏的,你去看看
shen_wei 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 13 楼 的回复:

引用 10 楼 的回复:

原来楼主是在Linux下,这可能会比较麻烦,窗口管理器似乎没有提供这种能力。楼主只能隐藏掉整个标题栏,然后再手工添加一个自己的标题栏上去。

但,为什么要这样呢?

系统菜单的作用是为了确保窗口的行为一致性,我们可以看到除了最大最小之类的功能,它还能调整工作区,这对Linux软件来讲显得尤为重要。去掉这种能力会让你的软件……
[/Quote]

自绘标题栏,你能提供一个例子吗?//谢谢了!!!!
xiachm 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 10 楼 的回复:

原来楼主是在Linux下,这可能会比较麻烦,窗口管理器似乎没有提供这种能力。楼主只能隐藏掉整个标题栏,然后再手工添加一个自己的标题栏上去。

但,为什么要这样呢?

系统菜单的作用是为了确保窗口的行为一致性,我们可以看到除了最大最小之类的功能,它还能调整工作区,这对Linux软件来讲显得尤为重要。去掉这种能力会让你的软件与其它软件格格不入。我很少见在Li……
[/Quote]
在Linux为什么不行我已经解释过了。这与Linux下窗口管理器的多样化有关,世界上毕竟只有一个Windows。

还是那句话,不建议这样做。如果非要这样做,自己画标题栏。

至少我只知道这些。
shen_wei 2012-04-17
  • 打赏
  • 举报
回复
问题1 屏蔽系统菜单。。
问题2 屏蔽整个Dialog右键事件


这两个怎么实现。。才是关键!!!
shen_wei 2012-04-17
  • 打赏
  • 举报
回复

这个就是测试结果。。

显示不能完整,还是拖拉Dialog界面。。

这个窗口无法拖动。。

tab键切换焦点 可以跑到主界面上,一系列的问题!!
xiachm 2012-04-17
  • 打赏
  • 举报
回复
你的标题栏没出现吗?setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint);
这句就是为了让标题栏出现的呀

setWindowFlags(Qt::SubWindow);试试这个,这两个是一回事
shen_wei 2012-04-17
  • 打赏
  • 举报
回复
测试过了。。。因为这上面有多个控件。太难看了!!
xiachm 2012-04-17
  • 打赏
  • 举报
回复
你试过了吗?
shen_wei 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

自定义窗口外观:
C/C++ code

setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint);



这样会丢掉关闭按钮,自己在对话框里添加一个“关闭”就可以了。
[/Quote]
这样不就是吧title给去掉了,多难看。。有没有其他办法。。。
xiachm 2012-04-17
  • 打赏
  • 举报
回复
自定义窗口外观:

setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint);


这样会丢掉关闭按钮,自己在对话框里添加一个“关闭”就可以了。
shen_wei 2012-04-17
  • 打赏
  • 举报
回复
群里大神们,等待你们的解答。。。谢谢了!!!

16,235

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧