2015-12-09 2 views
0

Je veux créer la mise en page personnalisée aussi bien ici: http://doc.qt.io/qt-5/qtwidgets-layouts-flowlayout-flowlayout-cpp.htmldoLayout: comment définir la géométrie au-dessus d'un autre widget?

Je veux une methood mettre case à cocher au-dessus du bouton personnalisé. Pour l'instant il y a

setGeometry(QRect(QPoint(... 

méthodes pour une ou l'autre bouton et case à cocher, mais si je le fais pour le bouton ou checkobox première case à cocher apparaît toujours « sous » le bouton et je ne peux pas voir/cliquez dessus.

Comment puis-je mettre la case à cocher sur le dessus du bouton là-bas?

+0

Pouvez-vous fournir un code du bouton? –

+0

@AlexanderTyapkov c'est juste QWidget ou QLayoutItem pour la mise en page mais à l'origine je l'ai mis comme QToolButton et ensuite layout-> addWidget (myButton); – Cynede

+0

ok. Donc, fondamentalement, vous utilisez la mise en page personnalisée, mais en même temps, vous voulez mettre la case à cocher en haut du bouton avec setGeometry? Sera-t-il plus facile de mettre la case à cocher dans la mise en page? –

Répondre

1

Il suffit de faire la case à cocher un enfant du bouton et appelez setGeometry par rapport au bouton. Les enfants sont toujours attirés par leurs parents.

QPushButton button("Hello World!", &w); 
button.setGeometry(0,0,100,100); 
button.show(); 

QCheckBox checkBox(&button); 
checkBox.setGeometry(button.rect()); 
checkBox.show(); 

Pas besoin de mettre la case à cocher dans une mise en page.

1

Je viens de faire cet extrait pour cocher la case en haut du bouton et cela fonctionne pour moi.

#include "mainwindow.h" 
#include <QApplication> 
#include <QPushButton> 
#include <QCheckBox> 

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


    QWidget w; 

    QPushButton button("Hello World!", &w); 
    button.setGeometry(0,0,100,100); 
    button.show(); 

    QCheckBox checkBox(&w); 
    checkBox.setGeometry(30,30,50,50); 
    checkBox.show(); 

    w.show(); 
    return a.exec(); 
} 

et est ici si vous allez changer l'ordre de « parentalité » et veulent case à cocher toujours être sur le dessus:

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

    QWidget w; 

QCheckBox checkBox(&w); 
checkBox.setGeometry(30,30,50,50); 
checkBox.show(); 

QPushButton button("Hello World!", &w); 
button.setGeometry(0,0,100,100); 
button.show(); 

checkBox.setParent(NULL); 
checkBox.setParent(&w); 

w.show(); 
return a.exec(); 

}