我有自定義QHBoxLayout
。我將這些佈局添加到QFrame
的QVBoxLayout
。因爲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); }
輸出: 「不是框架的一個孩子」 「喂」