Ich weiß, das ist im Grunde the same question, aber mein Problem geht weiter.Werben benutzerdefinierte Widget mit benutzerdefinierten Konstruktor in QT Creator
Der folgende Baum erklärt meine Struktur:
QWidget
|
CustomWidget
| |
MyTable MyWidgetAroundIt
I MyTable
in Qt Designer gefördert haben. Also kann ich es zu MyWidgetAroundIt
hinzufügen. Das hat ganz gut funktioniert. Das einzige Problem ist, CustomWidget
erfordert es Eltern ist auch ein CustomWidget
zu sein, dessen Konstruktor wie folgt aussieht:
CustomWidget(CustomWidget* parent) : QWidget(parent), _specialValue(parent->getSpecialValue)
Dieser Fehler führt kompilieren, wie der Designer generierten Code versucht MyTable
mit einem QWidget*
zu initialisieren, anstelle des CustomWidget*
. Was kann/sollte ich tun, um dies zu verhindern und/oder dem Designer einen Hinweis auf diese Anforderung zu geben?
dachte ich Ihre erste Lösung aus der der Weg zu gehen. Wie auch immer, ich überlegte das ganze Design und mein besonderer Wert scheint ein optionaler Shortkey für die Dinge zu sein, die ich machen muss. Ich werde mögliche Refactorings untersuchen, um alles wieder auf Standard QWidget * Eltern zu ändern. Danke für die Erklärung sowieso! Habe einen ganz klaren Punkt gemacht! – Migsi
Das klingt nach einem sehr guten Argument. Aber können wir nach der gleichen Logik nicht sagen, dass 'QWidget' das Liskov-Prinzip bricht, indem nur' QWidget'-Eltern (und nicht irgendein 'QObject') erlaubt werden? – Mike
Das ist ein API-Fehler. Es würde minimale Änderungen an der Architektur von Qt erfordern, um das zu beheben, aber im Moment wird es nicht unterstützt ([wenn du es versuchst, stürzt es ab]) (http://stackoverflow.com/q/28992276/1329652)). Es wäre keine große Sache zu beheben und ich denke nicht, dass es ein Beispiel ist, dem ich folgen kann. –