Qt如何屏蔽工具栏(QToolBar)自动折叠功能
最近发现Qt上工具栏一行放不下的时候,会自动折叠起来。当用户点击展开功能的小三角按钮时,工具栏会展开成多行。这个功能本身没什么问题,但是当工具栏展开的时候,鼠标光标一旦不小心移动到了工具栏外面,这时候,工具栏又会自动折叠上。这个功能就很烦人,经常遇到的一种情况就是用户展开了工具栏,但是还没点击具体的工具栏按钮的时候,由于鼠标光标不小心滑到工具栏外面了,结果工具栏自动折叠起来了。本来以为这是个修改下标志位比较好解决的问题,然后网上搜了一圈之后,发现好像没有遇到同样的问题。没办法,花了一点时间看了一下QToolBar的实现代码。发现工具栏折叠功能是在QEvent::Leave这个事件里处理的。知道原理后,可以新建一个类然后重写QToolBar的event方法。
具体代码如下:
#include "mytoolbar.h"
MyToolBar::MyToolBar(QWidget *parent) : QToolBar(parent)
{
}
bool MyToolBar::event(QEvent* e){
if(e->type() == QEvent::Leave){
if(isActiveWindow()){
//当前焦点在工具栏,直接return true不做任何处理,不自动折叠任务栏
return true;
}else{
//当前焦点不在工具栏,说明用户已经点击过工具栏按钮。调用默认的事件处理函数,鼠标光标滑开时自动折叠工具栏
return QToolBar::event(e);
}
}
return QToolBar::event(e);
}