Qt中控制元件疊加懸浮顯示的兩種實現方法
阿新 • • 發佈:2021-01-21
一是使用私有佈局,二是使用move函式,兩種方法實現效果類似
舉例:QTextEdit和QPushButton疊加,QPushButton顯示在QTextEdit內部,實現效果如圖:
私有佈局實現:
QTextEdit* pEditTmp = new QTextEdit;
QPushButton* pBtnTmp = new QPushButton(QString::fromLocal8Bit("複製"));
QHBoxLayout* pEditTmpLayout = new QHBoxLayout(pEditTmp);
pEditTmpLayout- >setSpacing(0);
pEditTmpLayout->setMargin(0);
pEditTmpLayout->addWidget(pBtnTmp);
pEditTmpLayout->setAlignment(pBtnTmp,Qt::AlignBottom | Qt::AlignRight);
QVBoxLayout *pMainLayout = new QVBoxLayout();
pMainLayout->setMargin(50);
pMainLayout->setSpacing(50);
pMainLayout- >addWidget(pEditTmp);
pMainLayout->addStretch();
this->setLayout(pMainLayout);
move函式實現:
QTextEdit* pEditTmp = new QTextEdit(this);
pEditTmp->setFixedSize(250,220);
QPushButton* pBtnTmp = new QPushButton;
pBtnTmp->setText(QString::fromLocal8Bit("複製") );
pBtnTmp->setFixedSize(80,50);
QVBoxLayout *pMainLayout = new QVBoxLayout();
pMainLayout->setMargin(180);
pMainLayout->setSpacing(0);
pMainLayout->addWidget(pBtnTmp);
pMainLayout->addStretch();
pEditTmp->move(10,10);
this->setLayout(pMainLayout);
使用注意點:
- 私有佈局方式:一般在底部顯示的控制元件指定為佈局的父類指標, *QHBoxLayout pEditTmpLayout = new QHBoxLayout(pEditTmp);**在內部顯示的為子控制元件,子控制元件在私有佈局裡面新增設定,主佈局只需新增父控制元件,子控制元件自然就跟隨顯示,不需再次新增。
- move函式實現:一般顯示在上面的控制元件要新增到主佈局中顯示,否則會被覆蓋,底部控制元件初始化時設定當前視窗父類指標,使用move函式設定座標移動到合適的位置即可。