在运行时添加自定义QWidget

时间:2012-12-27 20:30:23

标签: c++ qt widget qwidget

我正在尝试实现自定义窗口小部件层次结构:  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
    }

但是如果我尝试在运行时添加子窗口小部件,则子框架保持空白。即信号反应:

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

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但我遇到了一个非常类似的问题,结果是缺少对QWidget :: show()的调用。也许这也是你的问题?

我的问题在这里:Dynamically add instance inherited from QWidget

干杯。

答案 1 :(得分:0)

你是否达到了你的职能?

在制作new MySubWidgetqDebug() << Q_FUNC_INFO; 实例之前,在您的函数顶部:

subframe

插槽是否正确连接?

Qt会告诉您是否无法使用运行时警告连接插槽。查看Qt Creator中显示的调试输出,它可能会提到从未到达插槽的原因。

{{1}}可见吗?

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

希望有所帮助。祝你好运。