按钮组件可以直接添加到菜单中吗?
答案:2 悬赏:0
解决时间 2021-02-22 10:35
- 提问者网友:美人如花
- 2021-02-21 13:23
按钮组件可以直接添加到菜单中吗?
最佳答案
- 二级知识专家网友:桃花别处起长歌
- 2021-02-21 13:46
在这里,最关键的一点就是,大家不要被传统知识误导:真的认为它是一个按钮。有句柄(handle)的控件当然不能放在标题栏上了。有经验的程序员 用Spy++跟踪一下的话,马上就会发现其中的秘密。它并不是一个按钮,只不 过是处理成按钮的样子罢了。
在具体实例之前,我们应该知道几个关于标题栏的重要的消息:
WM_NCPAINT:重画标题栏消息。我们必须截住它,可以在这里重画按钮;
WM_NCLBUTTONDOWN:在标题栏上按下鼠标左键消息。我们可以截住它,在标题栏上画出按钮按下的样子,并且可以在其中进行自已的单击事件的处理,使得它像一个按钮;
WM_NCLBUTTONUP:在标题栏上释放鼠标左键消息。我们可以截住它,在标题栏上画出按钮弹起的样子;
WM_NCLBUTTONDBLCLK:在标题栏上双击鼠标左键消息。我们可以截住它,当在按钮区域双击时,我们就该使其无效,从而避免窗体执行最大化和还原操作。
WM_NCRBUTTONDOWN:在标题栏上按下鼠标右键消息。我们可以截住它,当在按钮区域双击时,我们就该使其无效,从而避免弹出窗体按制菜单。
WM_NCMOUSEMOVE:在标题栏上移动鼠标消息。我们可以截住它,当鼠标移出按钮区域时,我们就必须画出按钮没有被按下,即凸起时的样子。
WM_NCACTIVATE:当标题栏在激活与非激活之间切换时收到该消息。我们可以截住它,当该窗口处理激活状态时,我们可以做一些事情,比如说将我们的标题栏按钮上的字体变灰或变黑来指示该窗口的当前状态。下面我没有加入该项功能,如果大家感兴趣的话,可以自己完成。
(大家从这里可以发现,标题栏的消息都是WM_NC开头的)
知道了原理之后,相信大家一定可以做出更漂亮的按钮来。
在具体实例之前,我们应该知道几个关于标题栏的重要的消息:
WM_NCPAINT:重画标题栏消息。我们必须截住它,可以在这里重画按钮;
WM_NCLBUTTONDOWN:在标题栏上按下鼠标左键消息。我们可以截住它,在标题栏上画出按钮按下的样子,并且可以在其中进行自已的单击事件的处理,使得它像一个按钮;
WM_NCLBUTTONUP:在标题栏上释放鼠标左键消息。我们可以截住它,在标题栏上画出按钮弹起的样子;
WM_NCLBUTTONDBLCLK:在标题栏上双击鼠标左键消息。我们可以截住它,当在按钮区域双击时,我们就该使其无效,从而避免窗体执行最大化和还原操作。
WM_NCRBUTTONDOWN:在标题栏上按下鼠标右键消息。我们可以截住它,当在按钮区域双击时,我们就该使其无效,从而避免弹出窗体按制菜单。
WM_NCMOUSEMOVE:在标题栏上移动鼠标消息。我们可以截住它,当鼠标移出按钮区域时,我们就必须画出按钮没有被按下,即凸起时的样子。
WM_NCACTIVATE:当标题栏在激活与非激活之间切换时收到该消息。我们可以截住它,当该窗口处理激活状态时,我们可以做一些事情,比如说将我们的标题栏按钮上的字体变灰或变黑来指示该窗口的当前状态。下面我没有加入该项功能,如果大家感兴趣的话,可以自己完成。
(大家从这里可以发现,标题栏的消息都是WM_NC开头的)
知道了原理之后,相信大家一定可以做出更漂亮的按钮来。
全部回答
- 1楼网友:猎杀温柔
- 2021-02-21 15:05
利用 qt.customcontextmenu 来创建右键菜单方法:
1、qwidget 和它的子类 contextmenupolicy 的默认值是 qt.defaultcontextmenu 的,
所以需要通过 setcontextmenupolicy(qtcore.qt.customcontextmenu) 重新来设置他的值;
2、在qt设计师中, 可以直接修改 contextmenupolicy 的值为 customcontextmenu 并且写入到ui文件中,用qt设计师可以不用 setcontextmenupolicy 方法来设置。
3、customcontextmenu 它所发出的是一个 customcontextmenurequested 信号 (signal) 如下:
void customcontextmenurequested (const qpoint&)
这个信号是qwidget唯一与右键菜单有关的信号(也是自有的唯一信号), 同时也是很容易被忽略的信号(signal)
注: 文档中qwidget方法和属性巨量多, 就可以轻松自定义想要的右键菜单了,手编写槽(slot)。
def mylistwidgetcontext(self, point):
popmenu = qtgui.qmenu()
popmenu.addaction(qtgui.qaction(u'添加', self))
popmenu.addaction(qtgui.qaction(u'删除', self))
popmenu.addaction(qtgui.qaction(u'修改', self))
popmenu.exec_(qtgui.qcursor.pos())
4、接着就是连接槽。
5、添加成功。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯