gpt4 book ai didi

c++ - 如何使用 QWhatsThis 在 Qt 中启用动态 whatsthis-string?

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:04 26 4
gpt4 key购买 nike

为了让 Qt 中的小部件具有动态的 what's this string,以下几乎可以工作(遵循文档 http://doc.qt.io/qt-5/qtwidgets-widgets-tooltips-example.html):

class MyEdit : public QLineEdit {
Q_OBJECT
public:
bool event(QEvent*e) {
if (e && e->type() == QEvent::WhatsThis) {
if (QHelpEvent *helpEvent = reinterpret_cast<QHelpEvent *>(e)) {
QWhatsThis::showText(helpEvent->globalPos(), "My text...");
return true;
}
}
return QLineEdit::event(e);
}
};

激活 what's this for the window 并点击 widget 显示“My text”(实际文本更复杂)。

问题:

  • 激活 what's this for the window 并将悬停在此小部件上显示死光标
  • Shift-F1 在小部件内不起作用。

第一个问题可以通过使用非空字符串调用 setWhatsThis("Dummy text"); 来解决,但感觉就像是 hack 并且此小部件中的 Shift-F1 显示“Dummy文本”。

是否有一种非破解的方式来处理它 - 特别是这样它就不会被更新破坏?

最佳答案

如果其他人偶然发现这个问题,以下似乎可以处理 Shift-F1:

class MyEdit : public QLineEdit {
Q_OBJECT
public:
bool event(QEvent*e) {
if (e && e->type() == QEvent::WhatsThis) {
if (QHelpEvent *helpEvent = reinterpret_cast<QHelpEvent *>(e)) {
QWhatsThis::showText(helpEvent->globalPos(), "My text...");
return true;
}
}
if (e && e->type() == QEvent::KeyPress) {
if (QKeyEvent *qk = reinterpret_cast<QKeyEvent *>(e)) {
if (qk->key() == Qt::Key_F1 && (qk->modifiers()&Qt::ShiftModifier)) {
QWhatsThis::showText(w.mapToGlobal(w.inputMethodQuery(Qt::ImCursorRectangle).toRect().center()), "My text...");
qk->accept();
return true;
}
}
}
return QLineEdit::event(e);
}
};

并结合调用 setWhatsThis("Dummy text"); 也是悬停部分。然而,这不是一个优雅的解决方案。

关于c++ - 如何使用 QWhatsThis 在 Qt 中启用动态 whatsthis-string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45084722/

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