0

我创建了几个放置在上下文菜单中的操作。现在我想将这些相同的操作添加到一个小工具栏。问题是工具栏应位于 VerticalLayout 内(在另一个小部件下方),而不是位于停靠区域之一。有没有办法将工具栏移动到自定义位置或将操作放置在另一个容器中?

4

1 回答 1

0

QActions应该只添加到菜单和工具栏。

如果我把你弄到那里,你会想要QActions放置在普通的小部件上,对吧?

一种解决方法是实现您自己的QPushButton类。为此类提供一个 addAction 方法,该方法执行以下操作。它将QAction作为按钮的成员添加,将 QAction 的文本设置为按钮的标签,并将按钮的信号连接clicked()到操作的插槽trigger()

像这样的东西:

void my_button::addAction(QAction* p_action)
{
    if( pAction != NULL )
    {
        m_linked_action = p_action;

        setText(m_linked_action->text());

        connect(this,SIGNAL(clicked()),m_linked_action,SLOT(trigger()));
    }
    else
    {
        assert(false);
    }
}

这只是一个非常粗略的例子。您需要考虑很多事情,例如在删除操作时正确断开信号等。您还必须注意对可检查操作和类似内容的特殊处理(按钮也必须是可检查的,并且必须连接信号......)。但我认为这是一个很好的开始方式。


替代方案:
您还可以做的不是连接,而是重新实现mouseReleaseEvent您的按钮并QAction::trigger()在那里调用。像这样:

void my_button::mouseReleaseEvent( QMouseEvent* e )
{
    if( e->button() == Qt::LeftButton )
    {
        if(m_linked_action != NULL)
        {
            m_linked_action->trigger();
        }
    }

    QPushButton::mouseReleaseEvent(e);
}

通过这样做,您可以将按钮放置在任何地方,单击按钮时将触发链接的操作。


于 2012-06-01T07:32:07.567 回答