运行

2012-12-27 35 views
1

我想实现一个自定义窗口小部件的层次结构中添加自定义的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 
    } 

但是,如果我尝试在运行时添加subwidget,sub_frame保持空白。即信号反应:

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

回答

0

你到达了你的功能?

在您的函数顶部做MySubWidget放的new实例之前:

qDebug() << Q_FUNC_INFO; 

是否正确连接槽?

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

是否subframe可见?

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

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

+0

是的,是的,是的。在询问之前,我_multi_checked槽连接并且所有框架都可见。 –

1

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

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

干杯。