2014-11-20 40 views
10

Mam następujący kod i muszę go zmienić za pomocą kodu Qt4.Jak przekonwertować QIcon na QPixmap

QIcon icon; 
QPixmap pixmap = icon.pixmap(); // Qt3 code 

zastąpienia kod QT3 z Qt4, trzeba wymienić pixmap() zastosowaniem jednej z następujących metod dostarczanych przez Qt4.

QPixmap QIcon::pixmap (const QSize & size, Mode mode = Normal, State state = Off) const 
QPixmap QIcon::pixmap (int w, int h, Mode mode = Normal, State state = Off) const 
QPixmap QIcon::pixmap (int extent, Mode mode = Normal, State state = Off) const 

Ponieważ nie wiem, jaki rozmiar lub wymiar jest używanie w tym wezwaniu pixmap(void). Muszę więc znaleźć alternatywę, która może zlikwidować ten kod, nie pytając wprost o rozmiar.

Co rozumiem z tego segmentu kodu. To przybiera rozmiar ikony. Więc próbuję ustalić rozmiar ikony. Ale znowu nie znajduję żadnej metody na uzyskanie rozmiaru ikony.

+0

Istnieją statyczne metody 'QIcon :: pixmap()' do tego (z [documentation] (http://qt-project.org/doc/qt-4.8/qicon.html)) –

+0

Czy widzisz dokumentację QIcon? ? http://qt-project.org/doc/qt-5/qicon.html – JKSH

+0

proszę odnieść się do pytania ponownie. Zaktualizowałem go, by uzyskać więcej informacji. – Jai

Odpowiedz

18

QIcon może zawierać wiele obrazów o różnych rozmiarach, o genericicon.pixmap() jest zbyt arbitralne (którego wielkość zostanie wykorzystana do budowy QPixmap?). pixmap() method jest nadal dostępna, ale musisz określić, jaki rozmiar chcesz.

Jeśli znasz rozmiaru, to możesz po prostu użyć:

QPixmap pixmap = icon.pixmap(requiredImageSize); 

Jeśli nie (jak w Twoim przypadku), to masz jakieś alternatywy. Najpierw możesz poprosić o zdjęcie o określonym rozmiarze (lub mniej) za pomocą metody QIcon::actualSize().

QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(32, 32))); 

Suppsing icon zawiera 16x16, 24x24 i 64x64 to będzie powrót 24x24 (największy obraz mniejszy niż to, co określono).

Druga alternatywa jest, aby wybrać największy dostępny obraz (przy założeniu, że szerokość i wysokość są zawsze równe) rozmiary odpytywanie przy użyciu QIcon::availableSizes():

QList<QSize> sizes = icon.availableSizes(); 
int maximum = sizes[0].width(); 
for (int i=1; i < sizes.size(); ++i) 
    maximum = qMax(maximum, sizes[i].width()); 

QPixmap pixmap = icon.pixmap(QSize(maximum, maximum)); 

Zauważ, że jeśli użyć pierwszej metody i określenia wartości wystarczająco duży wtedy” ll mają ten sam wynik:

QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(1024, 1024))); 

oczywiście możesz też po prostu wybrać pierwszy/ostatni dostępny rozmiar:

QPixmap pixmap = icon.pixmap(icon.availableSizes().first()); 
QPixmap pixmap = icon.pixmap(icon.availableSizes().last()); 
3

Istnieje kilka metod opisanych w QIcon reference documentation. Na przykład:

QPixmap QIcon::pixmap(const QSize & size, Mode mode = Normal, State state = Off) 

gdzie wystarczy podać rozmiar pożądanego wyniku.