In QMenuBar existierende Einträge suchen

Alles rund um die Programmierung mit Qt
Antworten
flo_weitweg
Beiträge: 33
Registriert: 14. Januar 2005 15:11

In QMenuBar existierende Einträge suchen

Beitrag von flo_weitweg »

Hallo!

Meine App. ist aus vielen Plugins aufgebaut die am Anfang geladen werden. Für jedes Plugin wird ein QMenu in der MenuBar angelegt. Nun würde ich aber bei gleichen QMenu's das bereits vorhandene nutzen - leider klappt das nicht! Folgendes hab ich probiert:

Code: Alles auswählen

m_theMenu = ui.menuBar->findChild< QMenu * >( plugin->getMenuString() );
if( !m_theMenu )
    m_theMenu = new QMenu( sfp->getMenuString() );
    
ui.menuBar->addMenu( m_theMenu );
Hat jemand eine Idee!

Danke
flo_weitweg
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Text des Menüs != Name des Menüs. Damit die Menüs mit findChild gefunden werden können, musst Du ihnen mit setObjectName(...) den entsprechenden Namen geben.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
flo_weitweg
Beiträge: 33
Registriert: 14. Januar 2005 15:11

Beitrag von flo_weitweg »

Hallo macman!

Danke für den Tipp! Das hat schon mal was gebracht, leider aber noch nicht den Erfolg ...
Folgende Implemntierung hab ich und weiß nicht warum es nicht geht:

Code: Alles auswählen

qstrMenu = plugin->getMenuString(); 
m_theMenu = ui.menuBar->findChild< QMenu * >( qstrMenu );
if( !m_theMenu )
{
    m_theMenu = new QMenu( qstrMenu );
    m_theMenu->setObjectName( qstrMenu );
    ui.menuBar->addMenu( m_theMenu );
}
Qt findet nie das child!
Vllt hast du noch eine Idee?

Danke
Flo
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Außer debuggen? Das würde ich jetzt machen, alle Children holen, manuell mal durch gehen und die Strings vergleichen. Eventuell hat der Menüname Leerzeichen, die beim Objektnamen abgeschnitten werden oder etwas in der Art.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Ich glaub ich würde ein QHash<QString, QMenu*> benutzen.

MfG,
FaS
Antworten