我最近一直在研究Qt,并且有以下问题:
QAction
和QToolButton
有什么区别? QPushButton
?例如,当鼠标进入QPushButton
的边界时,是否应该进行覆盖以便得到通知?我不需要为了获得signal
click()
。 最佳答案
问题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);
菜单栏使用文本描述在菜单中与该 Action 相对应的条目中创建一个条目。同样,工具栏使用
QAction
上设置的图标在工具栏中创建与该 Action 相对应的图标。选择菜单项,单击工具栏图标或按键盘快捷键都将产生相同的效果:通过QAction::triggered()
到newFile()
的链接定义的效果。因此,直接回答您的问题:
QAction
是定义应用程序执行的特定任务的各种参数和行为的抽象方法。 QToolbarButton
是由QWidget
响应QToolbar
创建的UI对象(从QToolbar::addAction()
派生)问题2:
是的,
QPushButton
具有从clicked()
继承的 signal
QAbstractButton
,但是确实没有一种方法来通知鼠标何时进入其边界。为了实现此目的,您有两个选择,但是首先需要首先将 mouseTracking
属性设置为启用。即使没有按下鼠标按钮,这也允许您在QPushButton
上接收鼠标移动事件。完成此操作后,您需要探索以下选项之一:QPushButton
子类化并重新实现 mousePressEvent
,以响应鼠标位置。 eventFilter
上安装另一个小部件作为 QPushButton
,并监视类型(QEvent::MouseMove
)的事件。 关于qt - QAction与QToolButton以及何时覆盖Basic类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9342868/