2017-07-13 5 views
1

のQtでウィジェット(ドキュメントhttp://doc.qt.io/qt-5/qtwidgets-widgets-tooltips-example.html次)以下のほとんど作品のため、この文字列を何ダイナミックを持つために:QWhatsを使用して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は「ダミーテキスト」を示しています。

特に、アップデートによって壊れないように、非ハックの処理方法はありますか?

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");を呼び出すと組み合わせる:この問題に関する事例他の誰かがつまずいて

答えて

0

以下は、Shiftキーを押しながらF1を扱うように思われます。しかし、それは優雅な解決策ではありません。

関連する問題