gpt4 book ai didi

c++ - QtToolBar 在按钮文本中带有带下划线的快捷键

转载 作者:太空狗 更新时间:2023-10-29 21:17:34 26 4
gpt4 key购买 nike

我有一个带有纯文本按钮 Action 的简单 Qt 工具栏:

MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
{
QToolBar* toolBar = new QToolBar(this);
QAction* action = toolBar->addAction("&Action");

QObject::connect(action, SIGNAL(triggered()), this, SLOT(onAction()));
action->setShortcut(QKeySequence("ctrl+a"));
addToolBar(toolBar);
}

我想在 Action 中给 A 加下划线,以反射(reflect)其作为快捷键的作用。如何实现?

最佳答案

标准 QAction 小部件(它实际上是一个 QToolButton)使用其文本的剥离版本进行显示:“&Menu Option...”变为“Menu Option”。

您可以通过子类化 QWidgetAction 创建一个不使用剥离文本的自定义 QAction 小部件:

MyAction::MyAction(QObject *parent) :
QWidgetAction(parent)
{
}

QWidget* MyAction::createWidget(QWidget *parent)
{
QToolButton *tb = new QToolButton(parent);
tb->setDefaultAction(this);
tb->setText(this->text());// override text stripping
tb->setFocusPolicy(Qt::NoFocus);

return tb;
}

在您的 MainWindow 构造函数中按如下方式使用它:

MainWindow(QWidget* parent=0) : QMainWindow(parent)
{
QToolBar* toolBar = new QToolBar(this);
MyAction* action = new MyAction();
action->setText("&Action");
action->setShortcut(QKeySequence(tr("ctrl+a","Action")));
toolBar->addAction(action);

QObject::connect(action, SIGNAL(triggered()), this, SLOT(onAction()));
addToolBar(toolBar);
}

下划线快捷字母的外观取决于您的应用程序风格。以下是强制显示快捷方式下划线的自定义样式示例:

class MyStyle : public QProxyStyle
{
public:
MyStyle();

int styleHint(StyleHint hint,
const QStyleOption *option,
const QWidget *widget,
QStyleHintReturn *returnData) const;
};

int MyStyle::styleHint(QStyle::StyleHint hint,
const QStyleOption *option,
const QWidget *widget,
QStyleHintReturn *returnData) const
{
if (hint == QStyle::SH_UnderlineShortcut)
{
return 1;
}

return QProxyStyle::styleHint(hint, option, widget, returnData);
}

然后您应该为您的应用程序设置该样式:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyle(new MyStyle);
Widget w;
w.show();

return a.exec();
}

关于c++ - QtToolBar 在按钮文本中带有带下划线的快捷键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32577789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com