これは基本的に同じ質問ですが、私の問題はさらに進んでいます。
次のツリーは私の構造を説明しています:
QWidget
|
CustomWidget
| |
MyTable MyWidgetAroundIt
MyTable
QtDesignerで宣伝しました。だから、私はそれをに追加することができMyWidgetAroundIt
ます。それは非常にうまくいきました。唯一の問題は、CustomWidget
親もである必要があることです。CustomWidget
コンストラクタは次のようになります。
CustomWidget(CustomWidget* parent) : QWidget(parent), _specialValue(parent->getSpecialValue)
これにより、デザイナが生成したコードが。ではなくMyTable
、QWidget*
で初期化しようとするため、コンパイルエラーが発生しますCustomWidget*
。これを防止したり、設計者にこの要件に関するヒントを提供したりするには、どうすればよいですか?
親がにできないQWidget
ウィジェットは、もはやウィジェットではありません。あなたのデザインはリスコフの置換原則に違反しており、修正する必要があります。
ウィジェットが特定のタイプである場合は、特別な機能を自由に有効にできますが、ウィジェットは親の任意のウィジェットで使用できる必要があります。
したがって:
CustomWidget(QWidget* parent = nullptr) :
QWidget(parent)
{
auto customParent = qobject_cast<CustomWidget*>(parent);
if (customParent)
_specialValue = customParent->specialValue();
}
または:
class CustomWidget : public QWidget {
Q_OBJECT
CustomWidget *_customParent = qobject_cast<CustomWidget*>(parent());
SpecialType _specialValue = _customParent ? _customParent->specialValue() : SpecialType();
SpecialType specialValue() const { return _specialValue; }
public:
CustomWidget(QWidget * parent = nullptr) : QWidget(parent) {}
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加