【问题标题】:Qt: How to Access Inherited Widget?Qt:如何访问继承的小部件?
【发布时间】:2019-12-23 11:23:06
【问题描述】:

我正在创建一个扩展 QPushButton 类的自定义小部件。我的问题是如何引用扩展QPushButton时自动放置在小部件中的按钮?很明显,获取parentWidget() 会返回上面的QMainWindow,所以我不确定调用该小部件来引用什么,无论是使用this 关键字还是其他方式。

例如,如果我的自定义类只继承QPushButton 类:

CustomButton::CustomButton(QWidget *parent) 
    : QPushButton(parent) 
{
}

而我的MainWindow 类只是实例化了该自定义按钮的一个实例:

HomeWindow::HomeWindow(QWidget *parent)
    : QMainWindow(parent)
{
    CustomButton btn = new CustomButton(this);
}

Qt 自动从继承中添加一个QPushButtonscreenshot of the window

我的问题是如何访问从QPushButton 继承时自动添加的QPushButton,以便我可以处理它的点击事件并从CustomButton 类中调整它的大小。我只是想打电话给this->inheritedWidget()in CustomButton.cpp,但不知道会是什么。

谢谢!

回答: 我希望通过setMinimumSize() 的重载来处理调整大小,但无法弄清楚如何访问继承的QPushButton 小部件。您可以使用QPushButton::setMinimumSize() 或您需要调用的任何其他函数来访问继承按钮的功能。可能是一个简单的问题,但很高兴能弄清楚。谢谢大家。

【问题讨论】:

    标签: c++ qt inheritance widget qpushbutton


    【解决方案1】:

    你的问题可以用一个例子来说明更清楚。

    但是,如果你正在做的事情是这样的

    class MyWidget : public QPushButton {
    

    然后您可以访问(publicprotected)基类的成员,就像访问您自己编写的类的成员一样。没有什么特别的要求,只需按名称提及基类成员,就像您在派生类中添加的成员一样。

    一个简单的例子:

    class Base {
    protected:
        int base_int;
    };
    
    class Derived : public Base {
        int derived_int;
    public:
        int getBaseInt() const { return base_int; }
        int getDerivedInt() const { return derived_int; }
    };
    

    如果存在歧义(例如基成员和派生成员都具有相同名称),那么您可以通过完全限定名称引用 Base 成员来解决该歧义:

    int getBaseInt() const { return Base::base_int; }
    

    但您很少需要这样做。

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      相关资源
      最近更新 更多