[gelöst] Banner in Toolbar

Alles rund um die Programmierung mit Qt
Antworten
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

[gelöst] Banner in Toolbar

Beitrag von Treehouse »

Hallo,

mich würde intressieren ob es möglich ist ein Banner in der Toolbar anzuzeigen, neben den normalen Buttons ? Vielleicht mit QLabel ? Wenn der User auf dieses Banner klickt sollte er zu einer Homepage geleitet werden.

Wenn es möglich ist gibt es irgendwo ein Beispiel?


Gruß

Treehouse
Zuletzt geändert von Treehouse am 8. September 2009 14:02, insgesamt 1-mal geändert.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Re: Banner in Toolbar

Beitrag von pfid »

Treehouse hat geschrieben:Hallo,

mich würde intressieren ob es möglich ist ein Banner in der Toolbar anzuzeigen, neben den normalen Buttons ? Vielleicht mit QLabel ? Wenn der User auf dieses Banner klickt sollte er zu einer Homepage geleitet werden.

Wenn es möglich ist gibt es irgendwo ein Beispiel?


Gruß

Treehouse
http://qt.nokia.com/doc/4.5/qtoolbar.html#addWidget
http://qt.nokia.com/doc/4.5/qlabel.html ... Links-prop
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

Beitrag von Treehouse »

Hey super, vielen dank für die Antwort.

Werde mir die Sachen mal ansehen.

Gruß

Treehouse
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

Beitrag von Treehouse »

Hat super geklappt. Nur habe ich noch das Problem das ich das Widget gerne immer rechts am Rand der Toolbar darstellen würde. Ich habs mal mit Qt::AlignRight probiert aber leider hat das nicht den gewünschten Erfolg gebracht.

Gruß

Treehouse
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Vielleicht ein Spacer der die Lücke ausfüllt?
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Keine Ahnung ob das funktioniert, da nicht getestet, ist mir nur als erstes eingefallen, außerdem nicht elegant und es gibt bestimmt leichtere Wege. ^^ Aaaalso versuch folgendes:

In die Toolbar addest du nur EIN Widget... ein ganz normales QWidget, dieses enthält ein QHBoxLayout. In dieses Layout legst du nacheinander die Widgets die Links stehen (Buttons oder was auch immer du da hast, Actions funktionieren nicht, da ein Layout Widgets aufnimmt), dann addest du in das Layout einen freien Raum, der sich immer den maximalen Platz nimmt und zwar mit my_layout.addStretch(1) und als letztes fügst du dem Layout dein Banner hinzu... Weiß wirklich nicht ob das so funktioniert...

Code: Alles auswählen

QHBoxLayout my_layout;
my_layout.addWidget( links_stehendes_widget_1 );
my_layout.addWidget( links_stehendes_widget_2 );
my_layout.addWidget( links_stehendes_widget_3 );
my_layout.addStretch(1);
my_layout.addWidget( my_banner );

QWidget toolbar_widget;

toolbar_widget.setLayout( my_layout );

my_toolbar.addWidget( toolbar_widget );
Ne Expertenmeinung dazu?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Treehouse hat geschrieben:Hat super geklappt. Nur habe ich noch das Problem das ich das Widget gerne immer rechts am Rand der Toolbar darstellen würde. Ich habs mal mit Qt::AlignRight probiert aber leider hat das nicht den gewünschten Erfolg gebracht.

Gruß

Treehouse
http://qt.nokia.com/doc/4.5/qspaceritem.html
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Exasperation hat geschrieben:Keine Ahnung ob das funktioniert, da nicht getestet, ist mir nur als erstes eingefallen, außerdem nicht elegant und es gibt bestimmt leichtere Wege. ^^ Aaaalso versuch folgendes:

In die Toolbar addest du nur EIN Widget... ein ganz normales QWidget, dieses enthält ein QHBoxLayout. In dieses Layout legst du nacheinander die Widgets die Links stehen (Buttons oder was auch immer du da hast, Actions funktionieren nicht, da ein Layout Widgets aufnimmt), dann addest du in das Layout einen freien Raum, der sich immer den maximalen Platz nimmt und zwar mit my_layout.addStretch(1) und als letztes fügst du dem Layout dein Banner hinzu... Weiß wirklich nicht ob das so funktioniert...

Code: Alles auswählen

QHBoxLayout my_layout;
my_layout.addWidget( links_stehendes_widget_1 );
my_layout.addWidget( links_stehendes_widget_2 );
my_layout.addWidget( links_stehendes_widget_3 );
my_layout.addStretch(1);
my_layout.addWidget( my_banner );

QWidget toolbar_widget;

toolbar_widget.setLayout( my_layout );

my_toolbar.addWidget( toolbar_widget );
Ne Expertenmeinung dazu?
/edit: Okay das Spaceritem (siehe unten) macht das was ich versuche reinzugrätschen viel leichter :D sry für den quark ;)
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

Beitrag von Treehouse »

Vielen dank für eure tollen Antworten.

Ich habe das jetzt mal so versucht:

Code: Alles auswählen

// toolbar logo
m_spacer = new QSpacerItem (100,48);
m_logo = new QLabel(ui.mainToolBar);
QPixmap logo;
logo.load("C:\\Logo.bmp");
m_logo->setPixmap(logo);
ui.mainToolBar->layout()->addItem(m_spacer);
ui.mainToolBar->addWidget(m_logo);
Leider hat es nicht den gewünschten Effekt. Ich scheine was falsch zu machen, wäre nett wenn mir jemand sagen könnte wo der Haken ist. Und ist es vielleicht möglich das Spacer Item immer so auszurichten das es immer zur Toolbar größe das Logo nach rechts schiebt oder muss man das immer per Hand anpassen?

Gruß

Treehouse
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Treehouse hat geschrieben:Vielen dank für eure tollen Antworten.

Ich habe das jetzt mal so versucht:

Code: Alles auswählen

// toolbar logo
m_spacer = new QSpacerItem (100,48);
m_logo = new QLabel(ui.mainToolBar);
QPixmap logo;
logo.load("C:\\Logo.bmp");
m_logo->setPixmap(logo);
ui.mainToolBar->layout()->addItem(m_spacer);
ui.mainToolBar->addWidget(m_logo);
Leider hat es nicht den gewünschten Effekt. Ich scheine was falsch zu machen, wäre nett wenn mir jemand sagen könnte wo der Haken ist. Und ist es vielleicht möglich das Spacer Item immer so auszurichten das es immer zur Toolbar größe das Logo nach rechts schiebt oder muss man das immer per Hand anpassen?

Gruß

Treehouse
Spiel doch mal hiermit rum:

Code: Alles auswählen

QSizePolicy::Policy hPolicy = QSizePolicy::Minimum
Desweiteren ist "hat es nicht den gewünschten Effekt" keine sehr genaue Fehlerbeschreibung ;)
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

ich hatte das mal so gemacht. Der Code müsste dann entsprechend angepasst werden.
Statt eines Spacers habe ich ein Label genommen. Funktionierte, daher ist es nicht mehr abgeändert worden.

Code: Alles auswählen

void CMainWindowBase::initLogo(QToolBar* const apToolBar)
{
    QPixmap Logo(QPixmap(CCompanyStrings::getLogoAndNameBitmapFile_105x30()));
    Logo.setMask(Logo.createHeuristicMask());

    QLabel* pLabel(new QLabel(this));
    pLabel->setContentsMargins(0, 0, 6, 0);
    pLabel->setPixmap(Logo);
    pLabel->setToolTip(CCompanyStrings::getAddressHtml());

    QLabel* pLabelSpacer(new QLabel(this));
    pLabelSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    QToolBar* pBar(apToolBar);
    if (pBar == NULL)
    {
        pBar = addToolBar(qApp->applicationName());
    }
    if (pBar != NULL)
    {
        pBar->setObjectName("logoBar_" + qApp->applicationName());
        pBar->setFloatable(false);
        pBar->setMovable(false);
        pBar->addWidget(pLabelSpacer);
        pBar->addWidget(pLabel);
    }
    else
    {
        delete pLabel;
        delete pLabelSpacer;
    }
}
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

Beitrag von Treehouse »

Hallo archer,

sehr sehr cool funktioniert mehr als perfekt. VIELEN VIELEN DANK!!!!

Thema ist gelöst.

Gruß

Treehouse
Antworten