Qt Context Menu,上下文菜单


化石原创文章,转载请注明来源并保留原文链接


Qt的上下文菜单实现方式要根据Widget的contextMenuPolicy(这是Widget的一个成员变量)来定。

1、自定义菜单

先在Widget初始化的时候调用

setContextMenuPolicy(Qt::CustomContextMenu);

指定该widget的上下文菜单是自定义的。

这里的自定义并不是说上下文菜单随意摆置内容-菜单怎么显示本来就是自定义。而是:实现上下文的方式或者说流程不同。

这里的流程是:

当上下文的行为(大多是右键点击)产生时,Qt底层会发出

 customContextMenuRequested() 

这个信号。

该信号定义在QWidget中:

 Q_SIGNALS:
     void customContextMenuRequested(const QPoint &pos);

所以,我们要能得到上下文信号,只要做一个slot就可以。

这样,自定义形式下,就三步:

a、setContextMenuPolicy(Qt::CustomContextMenu);

b、连接信号和插槽,比如:

connect(this, SIGNAL (customContextMenuRequested(const QPoint&)), this, SLOT (contextMenu(const QPoint&)));

c、在插槽里实现具体的菜单内容,位置是信号传过来的。

应用场合:

QTableView继承类的上下文菜单

2、默认上下文菜单

这个相当于用

 setContextMenuPolicy(Qt::DefaultContextMenu ); 

此种状况下,如果Widget中有重写的

void contextMenuEvent(QContextMenuEvent* event);

方法。这个方法在对应的时候就会激发。


化石原创文章,转载请注明来源并保留原文链接


发表评论

电子邮件地址不会被公开。 必填项已用*标注