Qt 在我的窗口的任何位置放置操作
我已经创建了几个放置在上下文菜单中的操作。 现在,我想将这些相同的操作添加到一个小工具栏中。问题是 工具栏应位于垂直布局内(另一个小部件下方) 而不是在一个码头区域。有办法搬家吗Qt 在我的窗口的任何位置放置操作,qt,Qt,我已经创建了几个放置在上下文菜单中的操作。 现在,我想将这些相同的操作添加到一个小工具栏中。问题是 工具栏应位于垂直布局内(另一个小部件下方) 而不是在一个码头区域。有办法搬家吗 将工具栏添加到自定义位置或将操作放置在另一个容器中?QActions只应添加到菜单和工具栏中 如果我把你放在那里,你会希望QActions可以放在普通的小部件上,对吗 解决方法是实现您自己的QPushButton类。为该类提供一个addAction方法,该方法执行以下操作。它将QAction添加为按钮的成员,将QAct
将工具栏添加到自定义位置或将操作放置在另一个容器中?
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);
}
通过这样做,您可以将按钮放置在任何位置,单击按钮时将触发链接操作