2017-07-13 38 views
1

为了有一个动态的这是什么字符串Qt中一个插件的下面几乎作品(文档http://doc.qt.io/qt-5/qtwidgets-widgets-tooltips-example.html以下):如何使用QWhatsThis在Qt中启用动态whatsthis-string?

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

激活这是什么的窗口,点击窗口小部件显示“我的文字” (实际文本更复杂)。

问题:

  • 激活这是什么的窗口和在这个小部件徘徊显示了死光标
  • 按住Shift键F1不小部件里面工作。

第一个问题可以围绕通过调用setWhatsThis("Dummy text");与非空字符串的工作,但感觉就像一个黑客和Shift-F1在这个小部件显示“虚拟文本”。

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

回答

0

在对这一问题的情况下,别人绊倒以下似乎处理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");还徘徊部分相结合。但是,这不是一个优雅的解决方案。

相关问题