2017-12-20 8 views
0

Ich habe eine QListWidget und eine QPushButton, die die QListWidget löscht. Im Moment ist mein Knopf neben dem QListWidget peinlichen leeren Raum verlassen.QPushButton Ausrichtung oben ein anderes Widget

enter image description here

Ich möchte die Taste über die QListWidget platzieren, so ist das würde die rechte untere Ecke abdecken.

versucht Platzierung ich nur den Knopf wie diese

QPushButton* button = new QPushButton(ui->listwidget); 
button->show(); 

Und es hat eine „schwebende“ Taste über mein Widget erstellen, aber ich kann nicht einen Weg, es zu platzieren richtig zu finden scheinen. Vielleicht könnte ich durch Trials-and-errors die richtigen Cooridanten finden, aber das Problem ist, dass mein Hauptfenster in der Größe veränderbar ist, also möchte ich nicht, dass die Schaltfläche in der Mitte der Liste oder komplizierter außerhalb der Ansicht endet.

Hat jemand eine bessere Idee als das?

+0

Verwenden Sie keine Layouts? – TCouch

+0

@Touch gut ich war und das verließ diese peinliche Linie von leeren Raum. Ich habe den Button unter der Liste platziert und der gesamte Streifen, der der Höhe des Buttons entspricht, war leer, während der Button nur wenig Platz einnahm. – madasionka

+0

Es könnte für uns nützlich sein, einen Screenshot zu sehen – TCouch

Antwort

1

Dies sollte möglich sein, obwohl ich nicht sicher bin, ob Sie mögen, wie viel Mühe es ist oder das Endergebnis. Aber auf den Punkt gebracht ...

Erstellen Sie die QPushButton mit Ihrem Fenster als Mutter (Ich gehe davon aus das QListWidget innerhalb eines Fensters oder einem anderen Behälter QWidget, die das Layout hat Sie erwähnt). Was auch immer das übergeordnete Widget sein mag, das ist Ihr Referenzrahmen für die Positionskoordinaten Ihrer Schaltfläche.

Sie müssen dann Ihre Schaltfläche mit QWidget::pos positionieren. Der Trick ist wo und wann.

Da die Position relativ zum übergeordneten Element ist, müssen Sie die innere Breite und Höhe des übergeordneten Elements mit QWidget::size() ermitteln, die Breite und Höhe der Schaltfläche subtrahieren (QWidget::frameSize()) und die neue Position entsprechend festlegen.

Sie müssen dies für jedes resize -Ereignis des übergeordneten Widgets tun. Eine Möglichkeit besteht also darin, QWidget::resizeEvent() in Ihrem übergeordneten Fenster erneut zu implementieren und die Schaltfläche von dort aus zu positionieren.

Dies ist nicht getestet ...

QPushButton* button = new QPushButton(this); // parent is current QWidget 
button->show(); 
... 
void MyWidget::resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE 
{ 
    QSize btnSize = button->frameSize(); 
    QSize containerSize = this->size(); 
    int newX = containerSize.width() - btnSize.width() - 10; // 10 is arbitrary margin 
    int newY = containerSize.height() - btnSize.height() - 10; 
    // position the button 
    button->move(newX, newY); 
    // call the superclass handler: substitute the actual superclass here 
    QWidget::resizeEvent(event); 
} 

werden Sie höchstwahrscheinlich die Dinge weiter müssen zwicken, vielleicht ziemlich viel, aber das sollte die allgemeine Idee sein. Der Schlüssel besteht darin, die Schaltfläche bei jeder Größenänderung des übergeordneten Elements neu zu positionieren, einschließlich der Anfangsgröße.

HTH