QLabel - Disabeln, wenn Label Link enthält
QLabel - Disabeln, wenn Label Link enthält
Hallo zusammen,
ich hab die Frage im letzten Posts dieses Threads bereits gestellt. Da sich dort jedoch niemand mehr meldet und es sich ja eigentlich um eine eigene Frage handelt, hier nun ein neuer Thread...
Ich hab ein QLabel, welches als Link dargestellt wird. Die Darstellung als Link (also Blau & Unterstrichen) erfolgt automatisch, wenn der entsprechende HTML-Code eingetragen wird.
Nun würde ich den Link gerne ab und an disabeln. Soweit auch kein Problem, allerdings wird die Darstellung des QLabels nun gar nicht geändert, dh. der Link ist weiterhin blau & unterstrichen. Ich hätte ihn aber gerne, wie gewohnt ausgegraut, damit man auch auf den 1. Blick erkennt, dass der Link disabled ist...
Wie kann ich das nun erreichen?
danke, mfg
mik
ich hab die Frage im letzten Posts dieses Threads bereits gestellt. Da sich dort jedoch niemand mehr meldet und es sich ja eigentlich um eine eigene Frage handelt, hier nun ein neuer Thread...
Ich hab ein QLabel, welches als Link dargestellt wird. Die Darstellung als Link (also Blau & Unterstrichen) erfolgt automatisch, wenn der entsprechende HTML-Code eingetragen wird.
Nun würde ich den Link gerne ab und an disabeln. Soweit auch kein Problem, allerdings wird die Darstellung des QLabels nun gar nicht geändert, dh. der Link ist weiterhin blau & unterstrichen. Ich hätte ihn aber gerne, wie gewohnt ausgegraut, damit man auch auf den 1. Blick erkennt, dass der Link disabled ist...
Wie kann ich das nun erreichen?
danke, mfg
mik
Hm, ich hab jetzt mal ein wenig mit den Style-Sheets herumgespielt und muss sagen, dass ich das Konzept bisher nicht kannte und es recht interessant finde!
Mein Problem konnte ich bisher allerdings noch nicht lösen:
Wenn ich ein normales QLabel (also ohne Link, ganz normaler schwarzer Text) hernehme und folgenden Code einfüge wird der Text rot, sobald ich das Property enabled=false setze (ist das Label enabled=true wird es erwartungsgemäß im Standard-Schwarz angezeigt):
Der selbe Code auf mein QLabel mit dem Link angewandt bringt leider keine Änderung.
Wenn ich allerdings ein anderes Attribut setze (zB. ":disabled { background: red }") wird dies durchaus richtig übernommen (dh. enabled ist der Hintergrund normal durchsichtig bzw. im Grau des übergeordneten Widgets, disabled wird der Hintergrund rot).
Warum wird das Attribut "color" nun nicht richtig übernommen, wenn es sich um einen Link handelt, den das QLabel darstellt und was kann ich dagegen machen?
danke, mfg
Mein Problem konnte ich bisher allerdings noch nicht lösen:
Wenn ich ein normales QLabel (also ohne Link, ganz normaler schwarzer Text) hernehme und folgenden Code einfüge wird der Text rot, sobald ich das Property enabled=false setze (ist das Label enabled=true wird es erwartungsgemäß im Standard-Schwarz angezeigt):
Code: Alles auswählen
m_ui->lblPrevTest->setStyleSheet(":disabled { color: red }");Wenn ich allerdings ein anderes Attribut setze (zB. ":disabled { background: red }") wird dies durchaus richtig übernommen (dh. enabled ist der Hintergrund normal durchsichtig bzw. im Grau des übergeordneten Widgets, disabled wird der Hintergrund rot).
Warum wird das Attribut "color" nun nicht richtig übernommen, wenn es sich um einen Link handelt, den das QLabel darstellt und was kann ich dagegen machen?
danke, mfg
Lass mich raten..... den Text hast du via Edit Text Funktion verändert oder?
Schau dir da mal den Srx an. Da Steht bei mir dann :
Da wird quasi die Farbe gesetzt (was davon jetzt genau die Oberhand hat (Stylesheet oder HTML Formatierung) weiß ich nicht. Aber schau doich mal an wie man soetwas via HTML lösen kann. Habs grad net zur Hand aber da gabs doch was.
Ich vermute (weiss es nicht) das der Stylesheet nicht diesen HTML überschreibt. Kannst ja mal versuchen die Color rauszunehmen beim HTML oder so
Schau dir da mal den Srx an. Da Steht bei mir dann :
Code: Alles auswählen
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="www.trolltech.com"><span style=" text-decoration: underline; color:#0000ff;">TextLabel</span></a></p></body></html>Ich vermute (weiss es nicht) das der Stylesheet nicht diesen HTML überschreibt. Kannst ja mal versuchen die Color rauszunehmen beim HTML oder so
Hab grade nochmal rumgespielt..... du musst dir mal den Src Text ansehen nachdem du das Stylesheet via Designer zB gesetzt hast => Da waren bei mir zunächst die Sachen die ich via Stylesheet drin hate, weiter unten kamen die Sachen wie der Text im Editor quasi konfiguriert wurde. Das habe ich bei mir dann rausgenommen und es ging!
Hm, ich weiß nicht recht, ob ich verstehe, was du meinst...
In dieser Zeile steht einiges an html-Code (zumindest, wenn ich über den Designer einen Link erzeuge wie im letzten Post des anderen Threads beschrieben).
Wenn ich diesen Code rausnehme wird mein Stylesheet durchaus übernommen. Allerdings wird das ganze dann gar nicht mehr als Link dargestellt und somit wird auch das linkActivated-Signal des QLabels niemals gesendet...
Genau hierin besteht ja mein Problem!
Hab jetzt auch noch ein wenig herumprobiert und kann mein Problem relativ weit eingrenzen:
Mit folgendem Code wird mein Stylesheet richtig angewandt (dh. die Schrift des QLabels ist rot, wenn es disabled ist):
Nun hab ich aber natürlich das Problem, dass das QLabel nicht als Link dargestellt wird (blau, unterstrichen) wenn es enabled ist und somit auch bei klick mit der Maus darauf kein linkActiviated-Signal schickt...
Mit folgendem Code wird der Link richtig dargestellt und das linkActiviated-Signal kommt in meinem verbundenen Slot an, jedoch wird das Label immer gleich gezeichnet, egal ob es enabled oder disabled ist:
Es sieht also so aus, als ob das Stylesheet ignoriert wird, sobald das QLabel html-Code darstellen soll bzw. darstellt.
Wer weiß, was ich dagegen machen kann und wie ich den Link trotzdem "disabled darstellen" (also grau) kann?
danke, mfg
Meinst du hier die Zeile(n) im ui_-File, in dem setText des QLabels aufgerufen wird?weiter unten kamen die Sachen wie der Text im Editor quasi konfiguriert wurde
In dieser Zeile steht einiges an html-Code (zumindest, wenn ich über den Designer einen Link erzeuge wie im letzten Post des anderen Threads beschrieben).
Wenn ich diesen Code rausnehme wird mein Stylesheet durchaus übernommen. Allerdings wird das ganze dann gar nicht mehr als Link dargestellt und somit wird auch das linkActivated-Signal des QLabels niemals gesendet...
Genau hierin besteht ja mein Problem!
Hab jetzt auch noch ein wenig herumprobiert und kann mein Problem relativ weit eingrenzen:
Mit folgendem Code wird mein Stylesheet richtig angewandt (dh. die Schrift des QLabels ist rot, wenn es disabled ist):
Code: Alles auswählen
m_ui->lblAddUser->setText("Normaler Text");
m_ui->lblAddUser->setEnabled(false);
m_ui->lblAddUser->setStyleSheet(":disabled { color: red }");Mit folgendem Code wird der Link richtig dargestellt und das linkActiviated-Signal kommt in meinem verbundenen Slot an, jedoch wird das Label immer gleich gezeichnet, egal ob es enabled oder disabled ist:
Code: Alles auswählen
m_ui->lblAddUser->setText("<a href=\"AddUser\">Ein Link</a>");
m_ui->lblAddUser->setEnabled(false);
m_ui->lblAddUser->setStyleSheet(":disabled { color: red }");Wer weiß, was ich dagegen machen kann und wie ich den Link trotzdem "disabled darstellen" (also grau) kann?
danke, mfg
Ich hab das ganze jetzt etwas "russisch" gelöst:
Für alle Link-Labels einen Event-Filter installiert und ein eigenes Property mit dem anzuzeigenden Text gesetzt:
Im Event-Filter fange ich jetzt das EnabledChanged-Event ab und setzte je nachdem, ob das QLabel enabled oder disabled ist den Text neu (also ganz normaler Text, wenn das QLabel disabled ist, html-Code für den Link, wenn das Label enabled ist):
Falls mal jemand vor dem selben Problem stehen sollte...
Natürlich wäre ich nach wie vor an einer etwas "eleganteren" Lösung interessiert (falls diese existiert)...
danke, mfg
Für alle Link-Labels einen Event-Filter installiert und ein eigenes Property mit dem anzuzeigenden Text gesetzt:
Code: Alles auswählen
m_ui->lblLink1->installEventFilter(this);
m_ui->lblLink1->setProperty("LinkText", tr("Link 1"));
m_ui->lblLink2->installEventFilter(this);
m_ui->lblLink2->setProperty("LinkText", tr("Link 2"));
//...Code: Alles auswählen
bool TestForm::eventFilter(QObject *obj, QEvent *event)
{
if (((obj == m_ui->lblLink1) || (obj == m_ui->lblLink2)) && (event->type() == QEvent::EnabledChange))
{
QLabel *pLblObj = (QLabel*)obj;
QString qStrText = pLblObj->property("LinkText").toString();
pLblObj->setText(pLblObj->isEnabled() ? tr("<a href=%1>%1</a>").arg(qStrText) : qStrText);
}
return QObject::eventFilter(obj, event);
}Natürlich wäre ich nach wie vor an einer etwas "eleganteren" Lösung interessiert (falls diese existiert)...
danke, mfg