qt:mainwindow-buildicon
This is an old revision of the document!
Something like this:
- MainWindow::buildIcon
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <QIcon> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // QIcon::setThemeName("Gion"); // ui->action_Open->setIcon(QIcon::fromTheme("document-open")); // ui->actionSave_as->setIcon(QIcon::fromTheme("document-save-as")); // ui->action_Quit->setIcon(QIcon::fromTheme("exit")); // we need a function that takes QIcon ands the sub-icons automatically: // theQIcon, formatString (with placeholder for size, int array of sizes) QIcon documentOpenIcon; documentOpenIcon.addFile( ":myIcons/16x16/document-open.png",QSize(16, 16)); documentOpenIcon.addFile( ":myIcons/24x24/document-open.png", QSize(24, 24)); documentOpenIcon.addFile( ":myIcons/24x24/document-open.png", QSize(32, 32)); ui->action_Open->setIcon(documentOpenIcon); QIcon saveAsIcon; saveAsIcon.addFile( ":myIcons/16x16/document-save-as.png", QSize(16, 16)); saveAsIcon.addFile( ":myIcons/24x24/document-save-as.png", QSize(24, 24)); saveAsIcon.addFile( ":myIcons/24x24/document-save-as.png", QSize(32, 32)); ui->actionSave_as->setIcon(saveAsIcon); QIcon exitIcon; exitIcon.addFile( ":myIcons/16x16/application-exit.png", QSize(16, 16)); exitIcon.addFile( ":myIcons/24x24/application-exit.png", QSize(24, 24)); exitIcon.addFile( ":myIcons/24x24/application-exit.png", QSize(32, 32)); ui->action_Quit->setIcon(exitIcon); // This mess doesn't work! // setActionIcon(ui->action_Open, "document-open", "Gion"); // setActionIcon(ui->actionSave_as, "document-save-as", "Gion"); // setActionIcon(ui->action_Quit, "exit", "Gion"); } MainWindow::~MainWindow() { delete ui; } 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. // Ha! This doesn't work because setting the theme name is dynamic! // 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; } void MainWindow::on_action_Quit_triggered() { this->close(); } /** * Append a regularly defined set of different sized icon images to a QIcon. * * The following usage example assumes the resources ":myIcons/16x16/exit.png", * ":myIcons/24x24/exit.png", and ":myIcons/32x32/exit.png" are available and * that we want to bundle them together into exitIcon. * * \code * QList<int> sizes; sizes << 16 << 24 << 32; * QIcon exitIcon; * buildIcon(&exitIcon, ":myIcons/%size%/exit.png", sizes); * \endcode * * Does NOT check whether the referenced resources actually exist. * * @return void */ void MainWindow::buildIcon(QIcon* const theIcon, ///< Pointer to the icon that will be built/appened to. QString const &iconRscTemplate, ///< A tag-based template string for the icon resource. Two tags are recognized in iconRscTemplate: \%size\% and \%dim\%. When the iconRscTemplate is expanded, the tag \%dim\% will be replaced by {iconSize} and \%size\% will be replaced by {iconSize}x{iconSize}, where {iconSize} is a string cast of an element in sizeList. QList const &sizeList ///< A list of single-dimension sizes to be added to the icon. ) { foreach (const int iconSize in sizeList) { QString theResource = iconRscTemplate; theResource.replace(QString("%size%"), iconSize+"x"+iconSize); // does this work? theResource.replace(QString("%dim%"), iconSize+""); // does this work? theIcon->addFile(theResource, QSize(iconSize, iconSize)) } }
qt/mainwindow-buildicon.1305216039.txt.gz · Last modified: 2011/05/12 16:00 by mithat