在运行时添加自定义Qwidget

Adding custom QWidget during runtime

本文关键字:Qwidget 自定义 添加 运行时      更新时间:2023-10-16

我正在尝试实现自定义窗口层次结构: QMainWindow-> QFrame-> MyWidget-> QFrame-> MySubWidget

这是mywidget类的样子:

    class MyWidget : public QWidget {
        Q_OBJECT
    public:
        MyWidget(QWidget *parent = 0, ...);
        ...
    public slots:
        void SlotFunction(int i);
        ...
    private:
        MySubWidget *sub_w;
        QFrame *sub_frame;
        ...
    }

如果我尝试在mywidget构造函数期间创建一个mysubwidget,则所有mysubwidget元素均以预期显示:

    MyWidget::MyWidget (...) : QWidget(parent) {
        ...
        sub_frame = new QFrame(this);
        ...
        sub_w = new MySubWidget(sub_frame); // commented out on a runtime test
    }

但是,如果我尝试在运行时添加子威因,则sub_frame仍然空白。IE。信号反应:

    void MyWidget::SlotFunction(int i) {
        sub_w = new MySubWidget(sub_frame); // update, repaint, show and hide methods aren't helphul
    }

我知道这是一个古老的问题,但是我遇到了一个非常相似的问题,事实证明缺乏对Qwidget :: show()的呼吁。也许那也是你的问题?

我的问题在这里:动态添加从qwidget继承的实例

欢呼。

您是否达到功能?

在制作newMySubWidget实例之前,位于功能的顶部:

qDebug() << Q_FUNC_INFO;

插槽连接正确吗?

QT会让您知道它是否无法使用运行时警告连接插槽。查看在QT创建者中显示的调试输出,它可能会提到从未达到插槽的原因。

subframe可见吗?

如果您的对象的父对象不可见,则显示或隐藏子对象只有在显示父级时会影响它。

希望有帮助。祝你好运。