User Tools

Site Tools


qt:mainwindow-setactionicon

The following doesn't work:

bool MainWindow::setActionIcon(QAction *theAction,
                               QString const &iconName,
                               QString const &backupTheme)
// Try to set theAction's icon from the iconName in the system icon theme.
// If the iconName isn't found in the system theme, try the backupTheme.
// Return true iff the icon was set.
// This doesn't work because setting the theme name is dynamic! The last
// theme set is the theme that's finally rendered.
// ...trying to see what happens when we make a local QIcon to store the icon ...
// that doesn't work either!
{
    QString systemTheme = QIcon::themeName();
    qDebug() << "iconName: " << iconName <<
                "systemTheme: " << systemTheme <<
                "backupTheme: " << backupTheme;
 
    if ( !systemTheme.isEmpty() && QIcon::hasThemeIcon(iconName) )
    {
        QIcon theIcon = QIcon::fromTheme(iconName);
        theAction->setIcon(theIcon);
        qDebug() << "set system theme icon for " << iconName;
        return true;
    }
 
    if (!backupTheme.isEmpty())
    {
        QIcon::setThemeName(backupTheme);
        if (QIcon::hasThemeIcon(iconName))
        {
            QIcon theIcon = QIcon::fromTheme(iconName);
            theAction->setIcon(theIcon);
            qDebug() << "Haz backup icon";
        }
        QIcon::setThemeName(systemTheme);
 
        qDebug() << "set backup theme icon for " << iconName;
        return true;
    }
    qDebug() << "did not set icon for " << iconName;
    return false;
}
qt/mainwindow-setactionicon.txt · Last modified: 2011/05/13 11:39 by mithat