为禁用的QToolButton启用QMenu访问
我有一个为禁用的QToolButton启用QMenu访问,qt,qtgui,qmenu,qaction,Qt,Qtgui,Qmenu,Qaction,我有一个QToolButton,附带了一个QMenu,其中包括两个QActions。 其中一个操作是按钮的默认操作。默认操作在单击操作时会动态更改,这非常有效 现在,这些QActions被信号启用和禁用。当(当前)默认操作被禁用时,QToolButton也被禁用 这导致无法访问的QMenu,其中仍然包含我希望能够选择的已启用的QMenu条目(QActions) 因此:当默认操作获得setEnabled(false)时,我能否以某种方式使菜单可用?或者还有其他想法吗?天真地说,您可以编写一个小函数
QToolButton
,附带了一个QMenu
,其中包括两个QActions
。
其中一个操作是按钮的默认操作。默认操作在单击操作时会动态更改,这非常有效
现在,这些QActions
被信号启用和禁用。当(当前)默认操作被禁用时,QToolButton
也被禁用
这导致无法访问的QMenu
,其中仍然包含我希望能够选择的已启用的QMenu
条目(QActions
)
因此:当默认操作获得
setEnabled(false)
时,我能否以某种方式使菜单可用?或者还有其他想法吗?天真地说,您可以编写一个小函数,在禁用QAction
时调用该函数,看看它是否是当前的默认操作,如下所示:
void MyDialog::on_button_clicked()
{
action2->setEnabled( false );
checkForDefault(action2);
}
void MyDialog::checkForDefault(QAction *action)
{
if ( tButton->defaultAction() == action ) {
QList<QAction*> list = tButton->menu()->actions();
int index = list.indexOf(action);
QAction *newDefault = list.at( ( index+1 ) % list.count() );
tButton->setDefaultAction(newDefault);
tButton->setEnabled(true);
}
}
void MyDialog::点击按钮()
{
action2->setEnabled(false);
检查默认值(操作2);
}
void MyDialog::checkForDefault(QAction*操作)
{
如果(tButton->defaultAction()==操作){
QList list=tButton->menu()->actions();
int index=list.indexOf(操作);
QAction*newDefault=list.at((索引+1)%list.count());
t按钮->设置默认操作(新默认);
t按钮->设置启用(真);
}
}
这将检查更改的操作是否为按钮的当前默认操作,如果是,将选择QMenu
中的下一个QAction
作为新的默认操作(如果禁用的操作是列表中的最后一个,则选择第一个操作)
另一种方法可能是让您自己的类继承自QToolButton
,并重载其actionEvent(QActionEvent*event)
方法来执行您需要的操作
这有什么帮助吗?我做了以下操作来准确地解决所述问题: 在我的
QToolButton
class I中,覆盖eventFilter
,如下所示:
bool MultiToolButton::eventFilter( QObject* inObject, QEvent* inEvent )
{
MultiToolButton* _multiToolButton =
dynamic_cast<MultiToolButton*>(inObject);
QMouseEvent* _mouseEvent = dynamic_cast<QMouseEvent*>(inEvent);
if(_multiToolButton
&& _mouseEvent && _mouseEvent->type() == QEvent::MouseButtonPress)
{
mMenu.setEnabled(true);
showMenu();
return true;
}
return QToolButton::eventFilter(inObject, inEvent);
}
谢谢你的回答。但是,我没有检查它。箭头被禁用的问题可以通过以下样式表解决,该样式表将标准箭头替换为位于url
path\u to\u arrow
中的图像。当按钮被禁用时,此图像不会改变:
QToolButton::menu-indicator,::menu-button
{
}
QToolButton::menu-arrow
{
image: url("path_to_arrow");
}
我使用了这个解决方案的一个变体(谢谢!)。是否有办法正确绘制菜单箭头(启用而不是禁用)?
QToolButton::menu-indicator,::menu-button
{
}
QToolButton::menu-arrow
{
image: url("path_to_arrow");
}