2016-05-21 11 views
0

Ich möchte ein Textfeld in Qt implementieren, das das Feld "Tags" im Stackoverflow repliziert (wenn Sie eine Frage einreichen). Bestimmte Schlüsselwörter werden durch Widgets ersetzt. Wenn ich ein Widget zurücksetze, sollte es durch den Text ersetzt werden, der zum Erstellen dieses Widgets eingegeben wurde. Wie könnte ich so etwas erreichen? Vielen Dank.QWidgets in ein Textfeld setzen

+0

Ist benutzerdefinierte Textstil nicht ausreichend zu tun, was Sie wollen? – Gwen

Antwort

1

Sie können beginnen, indem Sie ein QWidget erben und die KeyPress- und KeyRelease-Ereignisse implementieren. Imitiert ein QLineEdit-Widget. Daher müssen Sie möglicherweise nach wiederverwendbarem Code suchen, um eine Menge Arbeit zu vermeiden, z. B. das Erben von QLineEdit und das Überschreiben von paintEvent().

Dann verwenden Sie in Ihrem paintEvent den Maler, um den Nicht-Widget-Text und Ihre Widgets zu rendern.

Pseudo-Code:

SomeWidget::paintEvent(QPaintEvent *) 
{ 
    QPainter painter(this); 

    foreach (object ; objectsToDraw) { 
     if (isText) { 
      painter.drawText(); 
     } else if (isWidget) { 
      widget.render(&painter); 
     } 
    } 
}