programmierung - qt tutorial deutsch




Platzhalter für ein benutzerdefiniertes Widget (2)

Sie sollten ein QWidget im QtDesigner und es dann für Ihr benutzerdefiniertes Widget QtDesigner . Weitere Informationen finden Sie unter folgendem Link: http://doc.qt.digia.com/qt/designer-using-custom-widgets.html

Eine andere Option wäre, ein QtDesigner-Plugin für Ihr Widget zu erstellen, aber das wäre nur nützlich, wenn Sie mehrere Benutzer hinzufügen müssen.

Ich lade eine QMainWIndow-Basis aus einer * .ui-Datei. Außerdem habe ich ein benutzerdefiniertes Widget, das ich irgendwo auf dem Formular platzieren möchte. Derzeit lege ich in die .ui-Datei einen leeren QVBoxLayout namens placeholder und in der QMainWindow-Unterklasse do self.placeholder.addWidget(my_custom_widget)

Das einzige, was ich bei diesem Ansatz nicht mag, ist, dass das leere Layout keine eigene Größe hat. Ich kann ein Layout mit einer Zelle und mit einem Dummy-Widget ( QLabel zum Beispiel) mit der gewünschten Größe haben und dieses Widget ersetzen und dann mein benutzerdefiniertes Widget hinzufügen, aber die Methode scheint mir zu viel.

Was ist Ihr Ansatz für eine solche Aufgabe?

Ich benutze Python (PyQt4)


Hier ist ein kleines Tutorial, wie man ein Widget promoten kann:

  1. Klicken Sie mit der rechten Maustaste auf das Widget, das Sie als Platzhalter verwenden möchten, und wählen Sie " Hochstufen nach ..." .



  2. Füllen Sie die Popup-Felder mit den gesponserten Clases aus :
    • QWidget : QWidget in diesem Fall.
    • Name der MyWidget Klasse : Der Klassenname, mit dem Sie das Widget definiert haben, für das Sie den Platzhalter erstellen. Hier ist MyWidget
    • Header-Datei : /path/to/MyWidget.py ist der Pfad zu der Datei, in der MyWidget platziert wird.
  3. Sobald Sie auf Hinzufügen klicken, wird die Klasse erstellt und angezeigt, wählen Sie sie aus und klicken Sie auf Promote . Du bist fertig mit der Werbung.
  4. QWidget sollte in Ihrem Objektinspektor MyWidget werden. Der Name der Klasse lautet nicht mehr " QWidget , sondern " MyWidget .



  5. In der Datei unter /path/to/MyWidget.py ich eine Klasse namens MyWidget , und der Inhalt ist etwa so:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    from PyQt4 import QtGui
    
    class MyWidget(QtGui.QWidget):
        def __init__(self, parent=None):
            super(MyWidget, self).__init__(parent)
    
            self.labelHello = QtGui.QLabel(self)
            self.labelHello.setText("This is My Widget")
    
            self.layout = QtGui.QHBoxLayout(self)
            self.layout.addWidget(self.labelHello)