2017-05-06 61 views
0

我有自定義QHBoxLayout。我將這些佈局添加到QFrameQVBoxLayout。因爲QFrame已經有了一個佈局,所以我不能調用我自定義的QHBoxLaout的基類構造函數,而將QFrame作爲父類。所以我做了一個addItem到QVBoxLayout。這工作正常,但當我試圖抓我的cutom佈局作爲兒童我得到NULL。如果已經把它們與ItemAt()dynamic_cast抓拍到我的自定義佈局返回的ptr,但那對我來說非常難看。我如何做對?設置自定義佈局的右側母版

MyLayoutClass.h


    class MyLayoutClass : public QHBoxLayout{ 
     Q_OBJECT 
    public: 
     explicit MyLayoutClass(const QString& rb_name, const QString& label_name, QWidget * parent = 0); 
     QRadioButton * rb; 
     QLabel * label; 
    }; 

MainWindow.h:



    class MainWindow : public QMainWindow{ 
     Q_OBJECT 
    public: 
     explicit MainWindow(QWidget *parent = 0); 
    private: 
     Ui::MainWindow *ui; 
     QFrame * MyFrame; 
    } 

主窗口構造:


    MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent),MyFrame(nullptr), 
    ui(new Ui::MainWindow) 
    { 
     ui->setupUi(this); 
     for(int i = 0; i <4; i++) 
    { 
      MyLayoutClass * addLayout = new MyLayoutClass("Hallo","Welt",this->ui->MyFrame); 
      this->ui->MyFrame->layout()->addItem(addLayout); 
     } 
     MyLayoutClass* child = this->ui->MyFrame->findChild<MyLayoutClass*>(); 
     if(child==NULL) qDebug()<<"Not a single Child of the Frame"; 

     child = this->ui->MyFrame->layout()->findChild<MyLayoutClass*>(); 
     if(child== NULL) qDebug()<<"Not a single Child of Frame Layout"; 

     MyLayoutClass * first = dynamic_cast<MyLayoutClass*>(ui->MyFrame->layout()->itemAt(0)); 
     qDebug()<< first->rb->text(); 
    } 

MyLayoutClass構造:

 
    MyLayoutClass::MyLayoutClass(const QString &rb_name, const QString &label_name, QWidget *parent) 
    : QHBoxLayout(), rb(nullptr), label(nullptr) 
    { 
     rb = new QRadioButton(rb_name,parent); 
     label = new QLabel(label_name,parent);

this->addWidget(rb); 
    this->addWidget(label); 
} 

輸出: 「不是框架的一個孩子」 「喂」

回答

0

對不起你們「不是框架佈局的一個孩子」,我已經嘗試了一些與答案是真的簡單。與僅接受QWidget作爲父項的構造函數QHBoxLayout相反,成員函數setParent(Q_Object*)接受佈局爲父項。 所以這條線在MyLayoutClass構造解決我的問題

this->setParent(parent->layout()); 

後,輸出只是「喂」。所以我的自定義佈局現在是Frame和他的垂直佈局的孩子。之前這是不可能的,因爲該框架已經有了一個佈局。看起來我還沒有明白。