Skip navigation.

exploreopera

| Help

Sign up | Help

Posts tagged with "qt"

Programmiereditor - QCodeEdit

, , ,

Habe jetzt zumindest eine C++ Komponente entdeckt, die vielversprechend ausschaut. Die Komponente ist in Qt geschrieben -- und somit auch Plattformübergreifend. Und unterstützt einige Sachen bereits jetzt.

Die Komponente ist ein Teil der Entwicklungsumgebung Edyuk. Die sourcen können über SVN bezogen werden:

http://edyuk.svn.sourceforge.net/svnroot/edyuk/trunk/3rdparty/qcodeedit2/

Qt: Dateiexplorer 0.3

, , , ...

Heute veröffentliche ich die Version 0.3 meines Dateiexplorers. Dies ist überwiegend eine Bugfix Version. Folgende Bugs wurden identifiziert und liquidiert :smile:

  • bug: die auswahl der einträge im lister wurden nicht unter den verschiedenen sichten geteilt.
  • bug: der letzte eintrag einer spalte in der listenansicht konnte nicht ausgewählt werden.
  • bug: hat der anwender mehr als nur einen reiter und wurde versucht im "nicht ersten" reiter einen nicknamen einzugeben, stürzte die anwendung ab.
  • bug: beim umschalten zwischen den verschiedenen ansichten über das hauptmenü kann es im aktiven lister bei der navigation in den verzeichnissen zum absturz kommen.
  • erweiterung: nach einer löschoperation werden die lister auf ihre validität geprüft, da das aktuelle verzeichnis gelöscht sein könnte. ist dies der fall wird zum root verzeichnis gesprungen.
  • bug: beim anwählen eines links im krümmelpfad eines listers stürzt das programm gelegentlich ab.
  • bug: bei einem doppelklick wurde der editier modus für diesen eintrag aktiviert.
  • bug: in tabellenansicht wurde eine zelle und nicht die gesamte zeile ausgewählt.
  • bug: der lister wurde nicht aktiv geschaltet wenn auf den lister header gedrückt wird.
  • erweiterung: die anzeige der jeweiligen verzeichnisse im header bereich eines listers wird jetzt durch html links dargestellt.


Zum runterladen der Datei bitte freeOpus_0_3.tar.bz2 anklicken.

Und hier noch ein Paar Screenshots:



screenshot 01
screenshot 02
screenshot 03
screenshot 04
screenshot 05

Qt 4: Teil 4 - Nachtrag: Hintergrundbild setzen

, ,

Vor einiger Zeit habe ich mal beschrieben wie ein Hintergrundbild eines Widgets zu setzen ist. Für die jenigen, die es noch nicht mitgekriegt haben; Qt 4 unterstützt CSS. Also hier nochmal das Gleiche nur diesmal verwende ich Stylesheets.

Seit ihr bereit? Hier kommt es ...

myWidget->setStyleSheet( "background: url(':/graphics/images/splash.png')" );


jepp, das ist alles :smile:

Qt: Mein Dateiexplorer 0.2

, , ,

Hier kommt die Weiterentwicklung des Dateibrowsers ( v0.2 ) download

Einiges wurde verbessert:

- Drag&Drop implementiert
- multiple Reiter im Lister jetzt möglich
- Spitznamen für Verzeichnisse ( verwaltbar über die GUI )
die Eingabe des Spitznamens wird ausgelöst durch ":"
- i18n umgesetzt. zu den unterstützten sprachen gehören deutsch, englisch und russisch
- Löschen von Einträgen
- Kopieren und Löschen von Einträgen in eigene Threads ausgelagert um die GUI nicht einzufrieren.
- Programmweites Benachrichtigungssystem implementiert
- Vorschau für Textbasierte Dateien implementiert
- Vorschau wird über externe Plugins realisiert
- Bugfix


bild

Qt 4: Thumbnail für Textdatei

, , ,

Hab mich schon immer gefragt wie bei Zeus' fettem Arsch die das machen. In einem Dateiexplorer wird als Icon eine quasi Vorschau auf den Inhalt der Datei angezeigt. Magie, wird der eine oder andere sagen. Dachte ich auch zunächst.

Doch nun weiß ich es besser. Hier eine kleine Anleitung:

Schritt 1: Erstellen eines Icons

Da der Inhalt der Datei auf einem immer gleichen Hintergrund angezeigt werden sollte, erstellen wir uns ein Icon. Nutzt dafür euer lieblings BBP oder fragt das Marketing. Auf diesem "Hintergrundbild" werden wir den Inhalt drauf klatschen.

Schritt 2: Den Algorithmus implementieren

Im Grunde brauchen wir den Hintergrund auf dem wir zeichnen können, QPixmap

 QPixmap pixmap( "file_icon.png" );


Nehmen wir an es sieht so aus:



Ja, ich weiß, hübsch ist anders :smile:

Nun denn. Um in Qt auf irgendwas zeichnen zu können brauchen wir den QPainter. Der Painter braucht wiederum ein Objekt auf dem er zeichnen kann. Da kommt uns unser Pixmap ganz gelegen.

QPainter painter( &pixmap );


Jetzt brauchen wir nur noch den Inhalt den wir darstellen wollen. Um an den Inhalt der Datei zu kommen müssen wir diese natürlich öffnen.

QFile file( info.filePath() );


Was wir jetzt machen ist ganz einfach. Wir zeichnen den Inhalt/Text der Datei auf der Vorlage unseres painter.

if ( file.open( QIODevice::ReadOnly ) ) {
    painter.drawText( pixmap.rect(), Qt::AlignTop | Qt::AlignLeft, file.readAll() );
}


E Voilà, das war schon alles.

Qt - Eclipse Integration

, , ,

In einem vorherigen Beitrag habe ich eine mögliche Variante der Integration von Qt in Eclipse beschrieben. Ich gebe zu es war nicht die tollste Integration und ließ einiges zu wünschen übrig.

Jedoch gibt es nun mit der Version 0.7 eine von Trolltech bereitgestellte Integration in Form eines Eclipse Plugins. [download]

Dieses Plugin integriert den gesamten Designer in Eclipse. Bietet auch einige Vorlagen für Projekte und Klassen.

Darauf haben wir lange warten müssen, doch nun ist es da! :yes:

Qt 4.3 ist unterwegs

, , , ...

Qt 4.3 ist unterwegs und bringt wieder neue und leckere Sachen mit. Intro

ich bin echt gespannt ob Opera auf Qt 4 umsteigt. Einige Sachen in Qt 4 sind doch ziemlich verlockend.

Vorausgesetzt natürlich Opera verwendet Qt nicht nur für kleine Dialoge. Ich denke Opera verwendet Qt für die Darstellung der gesamten UI, jedoch sind die Widgets soweit an ihre Anforderungen angepasst worden, daß der Umstieg nicht einfach so möglich wäre.

Naja, nur mal so ...

Qt4 - Teil 4

, , , ...

In diesem Tutorial gehe ich ein wenig auf den Aspekt des Designs ein. Am Anfang hatte ich ziemliche Schwierigkeiten auch nur das Hintergrundbild eines Widget festzulegen; eine Eigenschaft background oder backgroundImage gibt es da nämlich nicht.

Also habe ich mich entschieden diesem Aspekt der Entwicklung dieses Tutorial zu widmen.

Im Grunde ist es ganz einfach. Die Inhaltsstoffe für dieses Rezept sind:

  1. Eine Instanz der Klasse QPalette
  2. Mehrere Instanzen der Klasse QBrush
  3. Mehrere Instanzen der Klasse QColor
  4. Je nach Geschmack eine oder mehrere Instanzen der Klasse QPixmap
  5. Das ganze würzen wir mit einer statischen Methode aus der Klasse QApplication oder
    verwenden dann doch lieber die Qt Resources


Was macht man also um z. B. folgendes Bild zu erreichen?



Um das Hintergrundbild eines Widget zu setzen muß man den Weg über eine Palette gehen. Eine Palette wird durch die Klasse QPalette repräsentiert. Der Konstruktor dieser Klasse sieht folgendermaßen aus:

QPalette::QPalette (
    const QBrush & windowText,
    const QBrush & button,
    const QBrush & light,
    const QBrush & dark,
    const QBrush & mid,
    const QBrush & text,
    const QBrush & bright_text,
    const QBrush & base,
    const QBrush & window
)


Für den Hintergrund ist lediglich die letzte Eigenschaft -- window -- zuständig. Hier ist ein Beispiel wie ich es gemacht habe:

QBrush *light      = new QBrush( QColor( "white" ) );
// QBrush *window  = new QBrush( QPixmap( QApplication::applicationDirPath() + "/graphics/images/splash2.png" ) );
QBrush *window     = new QBrush( QPixmap( ":/graphics/images/splash.png" ) );

QPalette *palette = new QPalette(
    *light,
    *light,
    *light,
    *light,
    *light,
    *light,
    *light,
    *light,
    *window
);

myWidget->setPalette( *palette );


Natürlich ist dieses Beispiel so nicht praktikabel, da für alles -- außer den Hintergrund -- dieselbe Farbe verwendet wird. Da ich aber nur den Hintergrund setzen wollte ist das völlig ausreichend.

Wie man sehen kann, haben wir die meisten Inhaltsstoffe aus dem Rezept hier verwendet und erklärt; mehr oder weniger. Der aufmerksame Leser wird jedoch bemerken, daß ich zwei Varianten für die Variable window habe. Wobei die erste auskommentiert ist.

// QBrush *window  = new QBrush( QPixmap( QApplication::applicationDirPath() + "/graphics/images/splash2.png" ) );
QBrush *window     = new QBrush( QPixmap( ":/graphics/images/splash.png" ) );


In der ersten Variante geben wir den Pfad zum Bild direkt an. Hier wird noch der absolute Pfad -- mittels der statischen Funktion applicationDirPath() -- mit eingebunden. Um die Anwendung aus der Konsole ausführen zu können würde auch die folgende Zeile genügen:

QBrush *window  = new QBrush( QPixmap( "graphics/images/splash2.png" ) );


Aus der Konsole würde die Anwendung das Bild finden und es als Hintergrund einbinden. Nicht jedoch, wenn man die Anwendung aus dem Dateiexplorer oder über eine Verknüpfung ausführt. Mit der Angabe des absoluten Pfades hat man auch in den letzten zwei Fällen das Bild in der Anwendung als Hintergrund. Sieht aber nicht elegant aus.

Die zweite Variante ist hier wohl die beste Lösung. In diesem Beispiel verwenden wir die Qt eigene Resources Vorgehensweise. Die Angabe

":/graphics/images/splash.png"


sagt Qt, daß die Datei splash.png eine interne Ressource ist, also reinkompiliertes Bild.

Damit Qt die Ressourcen mit in die Ausführbare Datei kompiliert, muß Qt natürlich wissen welche Dateien es sind und wo sie liegen. Hierzu erstellen wir eine .qrc Datei.

Die .qrc Datei in meiner Anwendung heißt application.qrc und hat nur einen Eintrag drin.

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file>graphics/images/splash.png</file>
</qresource>
</RCC>


Ferner muß man in der anwendung.pro Datei diese .qrc Datei registrieren. Die Zeile

...
RESOURCES = application.qrc
...


erledigt dies.

Jetzt nur noch kompilieren und voila, ein Bildchen als Hintergrund. Für weitere Informationen über Resources könnt ihr im oben angegebenen Link nachlesen.

Qt4 - Teil 3

, , , ...

Den dritten Teil des Tutorials habe ich im Forum verfasst. Hier ist der Link dazu.

Qt Wunschliste

, , ,

Falls weiteres Interesse an dem Qt Tutorial besteht bitte einen Kommentar zu diesem Beitrag hinterlassen. Darin könnt ihr auch schreiben in welche Richtung das Tutorial gehen soll.

Und nicht vergessen, es gibt auch ein Qt Forum.
October 2008
MTWTFSS
September 2008November 2008
12345
6789101112
13141516171819
20212223242526
2728293031