Symbole in der Toolbar

Qt Programmierung, QML, Qt-Plattformen
Antworten
mkdir
Beiträge: 4
Registriert: Mi Dez 19, 2012 4:43 pm

Symbole in der Toolbar

Beitrag von mkdir » Mi Dez 19, 2012 4:52 pm

Ich versuche mich momentan an einem ziemlich einfachen Projekt im QtCreator, bei dem sich eine Frage aufgetan hat: Wie schaffe ich es, dass die Symbole, die in der Toolbar angezeigt werden, die sind, die vom Icon-Kit, das in KDE/Gnome eingestellt wurde sind?
Ich könnte jetzt natürlich einfach als Pfad /usr/share/icons/<IRGENDEIN ICON-KIT>/... nehmen, aber wegen 2 Punkten bin ich mit dieser Lösung unzufrieden:

1. Ich möchte, dass sich mein Programm einigermaßen ins System einbindet, sprich, dass die Icons so aussehen, wie der Benutzer es will.
2. Ich versuche, meine Programme möglichst os-unabhängig schreiben, unter Mac OS X gibt es diesen Pfad nicht und unter Windows wäre der Pfad sowieso falsch angegeben (Laufwerksbuchstaben, Backslash statt Slash, usw...)

mkdir

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Symbole in der Toolbar

Beitrag von nufan » Mi Dez 19, 2012 5:21 pm

Hallo und willkommen im Forum :)

Du hast in QStyle ein enum, mit dem du auf ein paar Default-Icons zugreifen kannst:
http://qt-project.org/doc/qt-5.0/qtwidg ... ixmap-enum

Ich kann das grade leider nicht ausprobieren, aber so "sollte" es gehen:

Code: Alles auswählen

#include <QtWidgets/QMainWindow>
#include <QApplication>
#include <QToolBar>
#include <QAction>
#include <QStyle>

int main( int argc, char *argv[] )
{
    QApplication app( argc, argv );
    QMainWindow mw;
    QToolBar *tb = new QToolBar( "MyToolBar" );
    tb->addAction( app.style()->standardIcon( QStyle::SP_MediaStop ), "Stop", &app, SLOT(quit()) );
    mw.addToolBar( tb );
    return app.exec();
}

mkdir
Beiträge: 4
Registriert: Mi Dez 19, 2012 4:43 pm

Re: Symbole in der Toolbar

Beitrag von mkdir » Mi Dez 19, 2012 5:44 pm

Danke für die schnelle Antwort! :)

Zwei Fragen noch:
1. Ich arbeite mit dem Qt Designer. Wie stelle ich das denn im Designer ein? (Der kompilierte Code sieht dann z. B. so aus:

Code: Alles auswählen

/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created: ...
**      by: Qt User Interface Compiler version 4.8.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
******************************************************************************* */

...

public: QAction *actionImportieren;

...

actionImportieren = new QAction(MainWindow);
        actionImportieren->setObjectName(QString::fromUtf8("actionImportieren"));
        QIcon icon1(QIcon::fromTheme(QString::fromUtf8("gtk-open")));
        actionImportieren->setIcon(icon1);
)

2. Mir fehlen u. a. die Icons Importieren und Speichern als. Kriegt man die noch irgendwo?

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Symbole in der Toolbar

Beitrag von nufan » Mi Dez 19, 2012 5:50 pm

mkdir hat geschrieben:1. Ich arbeite mit dem Qt Designer. Wie stelle ich das denn im Designer ein?
Puh... ich fürchte gar nicht. Es gibt lediglich einen offenen Bug:
https://bugreports.qt-project.org/browse/QTBUG-2030
Du kannst die Icons dann ja in deiner Anwendung explizit setzen.
mkdir hat geschrieben:2. Mir fehlen u. a. die Icons Importieren und Speichern als. Kriegt man die noch irgendwo?
Ich kann dir jetzt nicht sagen wie das genau aussieht, aber das hört sich schon mal danach an:
QStyle::SP_DialogOpenButton: Icon for a standard Open button in a QDialogButtonBox.
QStyle::SP_DialogSaveButton: Icon for a standard Save button in a QDialogButtonBox.
Oder sind die schon vergeben?

mkdir
Beiträge: 4
Registriert: Mi Dez 19, 2012 4:43 pm

Re: Symbole in der Toolbar

Beitrag von mkdir » Mi Dez 19, 2012 6:14 pm

So, habe das ganze jetzt noch mal ausprobiert (ui->f ist das betreffende QAction-Element):

Code: Alles auswählen

ui->f->setIcon(QStyle::SP_DialogOpenButton);
Folgender Fehler:
../test/mainwindow.cpp: In constructor 'MainWindow::MainWindow(QWidget*)':
../test/mainwindow.cpp:9:47: error: no matching function for call to 'QAction::setIcon(QStyle::StandardPixmap)'
../test/mainwindow.cpp:9:47: note: candidate is:
/usr/include/qt4/QtGui/qaction.h:117:10: note: void QAction::setIcon(const QIcon&)
/usr/include/qt4/QtGui/qaction.h:117:10: note: no known conversion for argument 1 from 'QStyle::StandardPixmap' to 'const QIcon&'

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Symbole in der Toolbar

Beitrag von nufan » Mi Dez 19, 2012 6:19 pm

mkdir hat geschrieben:So, habe das ganze jetzt noch mal ausprobiert (ui->f ist das betreffende QAction-Element):

Code: Alles auswählen

ui->f->setIcon(QStyle::SP_DialogOpenButton);
Naja dein enum ist nur irgendeine ID, nicht dein echtes Icon. Du musst das Icon über den Style der Anwendung abfragen. In etwa so:

Code: Alles auswählen

Icon myIcon = qApp->style()->standardIcon( QStyle::SP_MediaStop ), "Stop", &app, SLOT(quit()) );
ui->f->setIcon( myIcon );
"qApp" ist ein globaler Zeiger auf deine QApplication-Instanz. Diese wird automatisch angelegt, du musst aber den QApplication-Header includieren.

mkdir
Beiträge: 4
Registriert: Mi Dez 19, 2012 4:43 pm

Re: Symbole in der Toolbar

Beitrag von mkdir » Mi Dez 19, 2012 6:23 pm

Jaaaaaaaaaaaaaaaa! Es funktioniert!

Code: Alles auswählen

ui->f->setIcon(qApp->style()->standardIcon(QStyle::SP_DialogOpenButton));
Daaaaanke für deine Hilfe! :D

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Symbole in der Toolbar

Beitrag von nufan » Mi Dez 19, 2012 6:27 pm

mkdir hat geschrieben:Daaaaanke für deine Hilfe! :D
Hehe kein Problem :)

Wenn du magst kannst du dich hier vorstellen:
http://www.proggen.org/forum/viewforum.php?f=41
Und beschreiben wer du bist und wie du uns gefunden hast :)

Antworten