Ich habe ein PNG-Format Bild von play button in dem ich als embedded resource in meiner Anwendung gespeichert habe.Qt: QIcon verschwindet beim Klicken; QIcon :: Mode wird nicht beachtet
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="icon">
<file>play.png</file>
</qresource>
</RCC>
Ich habe ein QIcon
mit dem gleichen Quellbild erstellt Satz für beide Normal
und Active
Modi
QIcon play;
play.addFile(":icon/play.png", QSize(), QIcon::Normal);
play.addFile(":icon/play.png", QSize(), QIcon::Active);
Von dem, was ich verstehe, sollte dies das Symbol angezeigt wird, wenn unclicked (Normal
-Modus) und weiter dabei geklickt, wenn (Active
Modus)
QIcon::Normal
: die pixmap Anzeige bei der Verwendung r interagiert nicht mit dem Symbol, aber die durch das Symbol dargestellte Funktionalität ist verfügbar.
QIcon::Active
: Zeigen Sie das Pixmap an, wenn die durch das Symbol dargestellte Funktionalität verfügbar ist und der Benutzer mit dem Symbol interagiert, z. B. indem Sie die Maus darüber bewegen oder darauf klicken.
Wenn ich jedoch darauf klicke verschwindet es (stattdessen wird ein leeres Feld angezeigt). Hier
ist das Symbol unclicked
Hier ist das Symbol
geklicktMinimal Arbeitsbeispiel:
ich ein minimales Beispiel erstellt haben, replizieren die Verhalten sehe ich
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
void initIcons()
{
Q_INIT_RESOURCE(view);
}
int main(int argc, char** argv)
{
QApplication* app = new QApplication(argc, argv);
QMainWindow* window = new QMainWindow();
QMenuBar* menu = new QMenuBar();
window->setMenuBar(menu);
QIcon play;
play.addFile(":icon/play.png", QSize(), QIcon::Normal);
play.addFile(":icon/play.png", QSize(), QIcon::Active);
QAction* action = new QAction(play, "", nullptr);
menu->addAction(action);
window->show();
return app->exec();
}
Update:
Ich habe auch jede Kombination von Mode
und State
ohne Verhaltensänderung versucht:
play.addFile(":icon/play.png", QSize(), QIcon::Normal, QIcon::On);
play.addFile(":icon/play.png", QSize(), QIcon::Normal, QIcon::Off);
play.addFile(":icon/play.png", QSize(), QIcon::Selected, QIcon::On);
play.addFile(":icon/play.png", QSize(), QIcon::Selected, QIcon::Off);
play.addFile(":icon/play.png", QSize(), QIcon::Active, QIcon::On);
play.addFile(":icon/play.png", QSize(), QIcon::Active, QIcon::Off);
Ich habe auch versucht addPixmap
QIcon play;
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Normal, QIcon::On);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Normal, QIcon::Off);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Selected, QIcon::On);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Selected, QIcon::Off);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Active, QIcon::On);
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Active, QIcon::Off);
Keiner von diesen ändert das Verhalten leider.
Was funktioniert gut für mich, das ist seltsam. Haben Sie versucht, die Pixmap auch im aktiven Modus hinzuzufügen? mit void QIcon :: addFile (const QString & Dateiname, const QSize & size = QSize(), Modus = Normal, Status = Aus) mit mode = Aktiv. so ähnlich: icon.addFile (":/play.png", QSize(), QIcon :: Aktiv); –
@GabrieldeGrimouard danke für den Kommentar. Ich habe die Frage aktualisiert, um Ihren Vorschlag zu berücksichtigen. Leider haben Sie immer noch keinen Erfolg mit diesem –
sieht aus, als müssten Sie separate Projekte mit einem Fenster und einer Schaltfläche erstellen, damit andere Ihr Problem reproduzieren können. – fghj