Laden...

Qt's Qyoto und Mono/.NET resourcen in einklang bringen

Erstellt von xxtjaxx vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.427 Views
X
xxtjaxx Themenstarter:in
4 Beiträge seit 2010
vor 14 Jahren
Qt's Qyoto und Mono/.NET resourcen in einklang bringen

Man kennt das:

Ich hatte für ne weile absolut kein C# gemacht und stattdessen in GUI programming mit KDE/Qt und C++ gestürzt. Um einigen leuten die etwas negativ gegenüber Mono waren ein schnippchen zu schlagen hab ich angefangen mit den bindings für C# rumzu spielen und am ende vllt ein app draus zu machen dazu brauchte ich ein paar eigene bilder sowie ein paar system Icons.

In c++ wird das über Q/Kicon und QResources erledigt die dann via qrc in das App mit "einkompiliert" werden.
Da das aber nicht unter C# möglich war und aber das system von Mono ein resourcemanagement über Assembly möglich is. hab ich einfach das KIcon gesubclassed und einen Kunstruktor gebastelt der überprüft ob es sich hier um ein bild handelt das in den Assembly resourcen vorhanden is und dann dieses als bytream in ein QByteArray schreibt was wiederum in ein QPixmap als Daten geführt wird und endgültig dann seinen Platz im KIcon findet.


using System;
using System.IO;
using System.Reflection;

using Qyoto;
using Kimono;
namespace KDEBrainStorm
{

	public class Icon : KIcon
	{
		public Icon (string resourceImage,Assembly asm)
		{
			bool found = false;
			string[] strArr = asm.GetManifestResourceNames();
			for( int i = 0 ; i < strArr.Length ; i++)
			{
				if(resourceImage == strArr[i])	
				{
					found = true;		
				}
			}
			if(found)
			{
				Stream sr = asm.GetManifestResourceStream(resourceImage);
				byte[] imagebuffer = new byte[(int) sr.Length];
				sr.Read(imagebuffer,0,(int) sr.Length);				
				arr = new QByteArray(imagebuffer);
				pixmap = new QPixmap();
				pixmap.LoadFromData(arr);
				AddPixmap(pixmap);
			}
			
		}
		
		private Assembly asm;
		private QByteArray arr;
		private QPixmap pixmap;
	}
}

Am Ende kann man das dann so nutzen:


Icon laugh = new Icon("face-laugh.png",Assembly.GetExecutingAssembly());
KPushbutton laughButton = new KPushButton();
laughButton.SetIcon(laugh);

Normaler weise nimmt KPushButton nur entweder KIcon oder QIcon als Icons an aber da ich ja KIcon als basis genommen habe hat es sich auch nicht dran gestört.

Happy Hacking!