我最近一直在研究Qt,并提出以下问题:
QAction
和QToolButton
之间有什么区别? QPushButton
?例如,我应该覆盖以便在鼠标进入QPushButton
的界限时获得通知吗?我无需获取signal
click()
。答案 0 :(得分:8)
问题1:
QAction
用于以一种可被许多不同用户界面对象理解的方式定义应用程序执行的任务。使用example from the Qt docs作为上下文:
定义了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()));
在实施的后期,QAction
被添加到文本菜单栏...
fileMenu->addAction(newAct);
...还有一个基于图标的工具栏:
fileToolBar->addAction(newAct);
菜单栏使用文本说明在与操作对应的菜单中创建条目。同样,工具栏使用QAction
上设置的图标在工具栏中创建与操作对应的图标。选择菜单项,单击工具栏图标或按键盘快捷键都会产生相同的效果:由QAction::triggered()
与newFile()
的链接定义。
因此,要直接回答您的问题:QAction
是一种抽象方式,用于定义应用程序执行的特定任务的各种参数和行为。 QToolbarButton
是QWidget
为响应QToolbar
QToolbar::addAction()
)
问题2:
是的,QPushButton
有一个clicked()
signal
继承自QAbstractButton
,但它确实缺少一种通知鼠标何时进入其边界的方法。为了实现这一点,您有几个选项,但首先需要先设置要启用的mouseTracking
属性。即使没有按下鼠标按钮,这也允许您在QPushButton
上接收鼠标移动事件。完成后,您需要探索以下选项之一:
QPushButton
并重新实现mousePressEvent
以响应鼠标位置。QPushButton
上安装另一个小部件eventFilter
,并关注类型为QEvent::MouseMove
的事件。