Layoutnamen bzw. -Index ermitteln können

Alles rund um die Programmierung mit Qt
Antworten
boesewicht
Beiträge: 8
Registriert: 9. Dezember 2008 18:57

Layoutnamen bzw. -Index ermitteln können

Beitrag von boesewicht »

Hallo,

in meinem Dialog-Fenster kann ich die Position bestimmen, in der ich die Mouse geklickt habe. Dieses Dialog-Fenster beinhaltet mehrere Layouts.

Kann mir jemand sagen ob/wie ich herausfinden kann welches Layout (ein Name, IndexNummer, oder so) sich unter dann auf dieser Position befindet, wenn ich diese ermittelt habe?

Somit würde ich gerne jedes Layout gezielt, durch Tastendruck ein-/ausschalten können.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

in meinem Dialog-Fenster kann ich die Position bestimmen, in der ich die Mouse geklickt habe
Ich nehme an, du überlädst in deiner Dialog-Klasse "mouseReleaseEvent(QMouseEvent *event)" oder so...
Kann mir jemand sagen ob/wie ich herausfinden kann welches Layout (ein Name, IndexNummer, oder so) sich unter dann auf dieser Position befindet, wenn ich diese ermittelt habe?
Wie wär's mit:

Code: Alles auswählen

  QLayout *layout = qobject_cast<QLayout*>(childAt(event->pos()));
  if (layout)
    layout->hide(); // disable.. or whatever...
boesewicht
Beiträge: 8
Registriert: 9. Dezember 2008 18:57

Beitrag von boesewicht »

Danke für die Antwort, solarix.

Leider hilft mir das irgendwie nicht weiter. Ich bekomme für "Layout" immer nur NULL zurück. Mein Code schaut nun (grob) so aus:

Code: Alles auswählen

test::test(QWidget *parent):QDialog(parent)
{
    ....
    PushButton = new QPushButton(tr("&test"));
    layout->addWidget(PushButton, 0, 0);
    setLayout(layout);

    PushButton->installEventFilter(this);
    ...
}

bool test::eventFilter(QObject *watchedObj, QEvent *event)
{
    ...
    QLayout *findLayoutAtXY;
    findLayoutAtXY = qobject_cast<QLayout*>(childAt(mouseEvent->pos()));
    if (findLayoutAtXY)
    {
        // alles super
    }
    else
    {
        // nichts gefunden
    }
    ....
}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Kein Wunder: childAt(...) liefert ja auch ein QWidget zurück und kein QLayout. Aber es gibt ja dann noch QWidget::layout()
boesewicht
Beiträge: 8
Registriert: 9. Dezember 2008 18:57

Beitrag von boesewicht »

Gut, jetzt habe ich schon ein wenig mehr Übersicht über das ganze. Auf mein Widget kann ich nun zugreifen und es z.B. Ein-/Ausblenden. Wenn ich nun aber gerne dessen gesamtes Layout Ein-/Ausblenden möchte, habe ich versucht das Layout so zu erhalten:

Code: Alles auswählen

QLayout *childLayout = new QHBoxLayout;
childLayout = childWidget->layout();
In diesem Fall bekomme ich aber immer nur NULL zurück, obwohl ich es ganz normal im Konstruktor zu einem Layout zusammengefasst habe (welches dann wiederum mit anderen zu einem übergeordneten Layout zusammengefasst wird).

Code: Alles auswählen

todayLayout = new QHBoxLayout;
todayLayout->addWidget(todayLabel);
todayLayout->addWidget(todayLineEdit);

allLayout = new QVBoxLayout;
allLayout->addLayout(todayLayout);
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

boesewicht hat geschrieben:Gut, jetzt habe ich schon ein wenig mehr Übersicht über das ganze. Auf mein Widget kann ich nun zugreifen und es z.B. Ein-/Ausblenden. Wenn ich nun aber gerne dessen gesamtes Layout Ein-/Ausblenden möchte, habe ich versucht das Layout so zu erhalten:

Code: Alles auswählen

QLayout *childLayout = new QHBoxLayout;
childLayout = childWidget->layout();
Wieso erzeugst du ein neues Layout-Objekt, wenn du dann doch lieber das von childWidget nimmst?
boesewicht
Beiträge: 8
Registriert: 9. Dezember 2008 18:57

Beitrag von boesewicht »

Ich dachte ich brauche doch irgend eine Variable, der ich dann die vorhandene Layout-Adresse zuweisen kann? (also sozusagen eine Kopie erstellen)
Wenn die Memberfunktion aufrufe weiß ich ja schließlich nicht welches der Layouts/Widgets gerade gemeint ist.

childWidget ist in diesem Fall ein belibieges Widget, welches ich vorher durch die Position bestimmt habe.
Antworten