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

  • QActionQToolButton有什么区别?
  • 我如何知道何时覆盖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/

    10-14 17:49