我创建了几个放在上下文菜单中的动作。 现在我想将这些相同的动作添加到一个小工具栏中。问题是 工具栏应位于VerticalLayout内(在另一个小部件下面) 而不是在其中一个码头区域。有没有办法搬家 自定义位置的工具栏或将操作放在另一个容器中?
答案 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);
}
通过这样做,您可以将按钮放在任何位置,单击按钮时将触发链接的操作。