2017-05-24 8 views
0

Puis-je utiliser Qt pour faire les choses suivantes:Comment créer un QFrame au milieu d'un autre QFrame?

J'ai besoin de deux QFrame s, un (enfant) est au milieu d'un autre (parent), et quand je change le parent QFrame, les enfants redimensionnera trop .

Comment puis-je définir la mise en page ou autre chose peut faire comme ça.

Tout comme l'image ci-dessous, le jaune est enfant, le blanc est parent.

enter image description here

+1

Vous créez un objet 'QFrame', lui définissez une disposition et ajoutez un autre objet' QFrame' dans cette disposition. Quel est exactement le problème? – thuga

Répondre

-1

Que diriez-vous quelque chose comme ça?

#include <QApplication> 
#include <QFrame> 

namespace { 
    static const auto STYLE_SHEET = "QFrame#MyFrame {border: 10px solid white; background: yellow}"; 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QFrame f; 
    f.setObjectName(QStringLiteral("MyFrame")); 
    f.setStyleSheet(STYLE_SHEET); 
    f.show(); 

    return a.exec(); 
} 
+0

Votre réponse ne contient qu'un seul 'QFrame'. L'OP a posé une question sur les 'QFrame' imbriqués. – m7913d

1

Ok, soyons deux QFrame ... Mais la première réponse est meilleure.

#include <QApplication> 
#include <QFrame> 
#include <QHBoxLayout> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QFrame f1; 
    f1.setStyleSheet("background: white"); 

    QFrame f2; 
    f2.setStyleSheet("background: yellow"); 

    QHBoxLayout l(&f1); 
    l.setContentsMargins(10, 10, 10, 10); 
    l.addWidget(&f2); 

    f1.resize(200, 200); 
    f1.show(); 

    return a.exec(); 
} 
0

J'ai essayé de trouver une solution comme ci-dessous.

QFrame *parent_frame = new QFrame(this);//this means parent_frame's parent widget 
QFrame *child_frame = new QFrame(parent_frame); 

child_frame ->setFixedSize(parent_frame->geometry().width() - 4, parent_frame->geometry().height() - 4); 
child_frame ->move(2,2); 

et réécrire l'événement resizeEvent du widget parent du parent_frame, faire la même chose

child_frame ->setFixedSize(parent_frame->geometry().width() - 4, parent_frame->geometry().height() - 4); 
child_frame ->move(2,2); 

la seule chose que vous devez faire attention à faire le premier setfixedsize après que vous faites this.show() afin qu'il puisse obtenir la bonne largeur et hauteur.