1

我正在尝试实现自定义小部件层次结构: 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 保持空白。即信号反应:

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

2 回答 2

1

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

我的问题是:动态添加从 QWidget 继承的实例

干杯。

于 2013-10-24T21:15:12.123 回答
0

你达到你的功能了吗?

在创建putnew实例之前,在函数顶部:MySubWidget

qDebug() << Q_FUNC_INFO;

插槽是否正确连接?

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

subframe可见的吗?

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

希望有帮助。祝你好运。

于 2012-12-27T23:13:19.413 回答