2012-05-31 22 views
0

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

回答

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); 
} 

通过做这样,你可以在任何地方将您的按钮,点击该按钮时所链接的动作将被触发。