在我的窗口的任何地方放置一个动作

时间:2012-05-31 13:03:23

标签: qt

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

1 个答案:

答案 0 :(得分: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);
}

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