QAction vs QToolButton以及何时覆盖Basic类?

Mr.*_*.Tu 6 qt

我最近一直在研究Qt,并提出以下问题:

  1. QAction和之间有什么区别QToolButton
  2. 我怎么知道何时覆盖QPushButton?例如,我应该覆盖以便在鼠标进入QPushButton界限时获得通知吗?我不需要为了获得signal click().

sam*_*m-w 8

问题1:

QActions用于以可由许多不同用户界面对象理解的方式定义由应用程序执行的任务.使用Qt文档中示例进行上下文:

A QAction是定义的; 它被赋予图标图像,文本描述,键盘快捷键和更长的工具提示描述,以及链接到用户定义的功能.

newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
newAct->setShortcuts(QKeySequence::New);
newAct->setStatusTip(tr("Create a new file"));
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
Run Code Online (Sandbox Code Playgroud)

稍后在实现中,QAction将两者都添加到文本菜单栏中......

fileMenu->addAction(newAct);
Run Code Online (Sandbox Code Playgroud)

...和一个基于图标的工具栏:

fileToolBar->addAction(newAct);
Run Code Online (Sandbox Code Playgroud)

菜单栏使用文本描述在菜单中创建与操作对应的条目.类似地,工具栏使用在其上设置QAction的图标在工具栏中创建与操作对应的图标.选择菜单项,单击工具栏图标或按键盘快捷键都会产生相同的效果:由链接QAction::triggered()到的定义newFile().

所以直接回答你的问题:a QAction是一种定义应用程序执行的特定任务的各种参数和行为的抽象方法.A QToolbarButtonQWidgetQToolbar响应创建的UI对象(派生自)QToolbar::addAction()


问题2:

是的,QPushButton有一个继承自的,但它确实缺乏一种方法来告知鼠标何时进入其边界.您有几个选项可以实现此目的,但首先您需要先设置要启用的属性.这样即使没有按下鼠标按钮,也可以接收鼠标移动事件.完成后,您需要探索以下选项之一:clicked() signalQAbstractButtonmouseTrackingQPushButton

  1. 正如您所建议的那样,您可以进行子类化QPushButton和重新实现mousePressEvent,以响应鼠标位置.
  2. 您可以在其eventFilter上安装另一个小部件QPushButton,并监视类型(QEvent::MouseMove)的事件.