Videoclip mit Standardanwendung öffnen lassen
-
@DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:
Kann mir jemand verraten, wie ich ein Icon für das Desktop-Symbol meiner Anwendung setzen kann
Wenns für die .exe ist: IIRC ist das Icon das für eine .exe angezeigt wird einfach die erste Icon-Resource die in der .exe enthalten ist. Oder war es die mit der niedrigsten ID? Weiss nimmer genau. Auf jeden Fall sollte es funktionieren wenn es die 1. Resource ist und du ID 1 verwendest.
Die genauen Regeln sollten sich aber relativ einfach ergoogeln lassen.
-
@DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:
Sehr interessant! Mal wieder so ein mysteriöses Phänomen. Sowas macht mich verrückt!
Ich glaube ich weiß was los ist. Öffne mal das betreffende Source-File mit Notepad++ und check ob das im ANSI Encoding gespeichert ist.
-
@Swordfish Das mit den Umlauten könnte ich mir mit Encoding-Unterschieden erklären. Aber das mit den Punkten?
-
Ich habe folgendes der pro.Datei hinzugefügt:
win32{
RC_FILE = myApp_resource.rc
}und die resource.rc-Datei
IDI_ICON1 ICON DISCARDABLE "[...]\myApp\myappico.ico"
Nun erscheint aber folgende Fehlermeldung:
No rule to make target '../myApp/myApp_resource.rc', needed by 'release/myApp_resource_res.o'. Stop.Zum ANSI-Problem komme ich noch, sobald das Problem mit dem Icon weg ist, sonst kann ich nicht erstellen.
UPDATE:
So, endlich habe ich es mit dem Icon geschafft!!! Ich habe die .rc-Datei vom Release-Ordner in den "Normalen" Projektordner getan. Kann mir jemand erklären wie das zustande kommt? Ich dachte immer, wenn ich auf "Release" einstelle, muss alles im Release-Ordner sein.Wie erstellt man eigentlich die .rc-Datei? Ich weiß nicht wie ich das genau geschafft habe dass sie angelegt wird...
Zum ANSI-Problem: Wenn ich die mainwindow.cpp mit Notepad öffne, werden die Umlaute korrekt angezeigt. Somit sollte das Problem ausgeschlossen sein, oder?
-
Notepad hat soweit ich weiss UTF-8 auto-detection. Also verlass dich nicht darauf. Nimm einen Editor der dir anzeigen kann welches Encoding er für ein File verwendet - wie z.B. Notepad2.
-
Danke für den Hinweis! Ich habe mir nun Notepad2 heruntergeladen. Wie ermittel ich damit die Codierung?
-
Notepad2 hat im ganz unteren Bereich des Fensters eine Leiste wo z.B. Zeilen/Spaltennummer drinnen steht.
Diese Zeile hat mehrere Sektionen - und in der dritten Sektion steht z.B. "ANSI". Das ist das Encoding.Wobei die Unterscheidung ANSI vs. UTF-8 natürlich nur funktioniert wenn das File entweder einen BOM hat oder Umlaute o.Ä. vorkommen. Weil bei reinem ASCII Inhalt BOM-freies UTF-8 und ANSI ja 100% identisch sind.
-
OK danke. Also bei mir steht "UTF-8".
-
Das erklärt dann zumindest mal das Problem mit den Umlauten. Weil die halt in UTF-8 ganz anders aussehen als in z.B. CP1252 (was die übliche ANSI CodePage für Windows hierzulande ist).
Ein Weg das zu fixen wäre natürlich Unicode zu verwenden.
Erklärt aber immer noch nicht das Problem mit den "...".
-
@hustbaer sagte in Videoclip mit Standardanwendung öffnen lassen:
Das erklärt dann zumindest mal das Problem mit den Umlauten. Weil die halt in UTF-8 ganz anders aussehen als in z.B. CP1252 (was die übliche ANSI CodePage für Windows hierzulande ist).
Ein Weg das zu fixen wäre natürlich Unicode zu verwenden.
Erklärt aber immer noch nicht das Problem mit den "...".
Für die 3 Punkte gibt es auch ein eigenständiges Zeichen statt 3 einzelne Punkte "zeichen".
Da DerDaVinciKot Qt verwendet wiso dann direkt die WinAPI ansprechen. Denn Qt bietet via QDesktopServices::openUrl das gleiche an, was auch ShellExecute von der WinAPI anbietet
und da QDesktopServices::openUrl QString verwendet gibt es dann keine Probleme mit der Zeichenkodierung da QString UTF16 verwendet bzw. beim Aufruf der nativen funktion den string passend konvertiert
-
@hustbaer sagte in Videoclip mit Standardanwendung öffnen lassen:
Erklärt aber immer noch nicht das Problem mit den "...".
Schiebe ich auf die fehlenden Anführungszeichen.
@DerDaVinciKot Speichere dein Source-file als ANSI und
system()
wird mit vielen Zeichen funktionieren.
Aber wie andere schon lange sagen: Nimm nichtsystem()
sondern zB.ShellExecute()
das versteht auch UNICODE.
-
Danke für Eure Mühe!
Ich habes es jetzt mal mit QUrl versucht. Doch irgendwo stimmt was nicht. Es passiert nichts:
QDesktopServices::openUrl(QUrl(ApplikationPfad + "\\Movies\\testclip.mp4", QUrl::TolerantMode));
-
@DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:
ApplikationPfad
Und was steht da drin? file:// ?
-
@DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:
"\Movies\testclip.mp4"
Die Pfade in einer URL sind mit /
-
QUrl::fromLocalFile
: Returns a QUrl representation of localFile, interpreted as a local file. This function accepts paths separated by slashes as well as the native separator for this platform.
-
@firefly sagte in Videoclip mit Standardanwendung öffnen lassen:
Da DerDaVinciKot Qt verwendet wiso dann direkt die WinAPI ansprechen. Denn Qt bietet via QDesktopServices::openUrl das gleiche an, was auch ShellExecute von der WinAPI anbietet
und da QDesktopServices::openUrl QString verwendet gibt es dann keine Probleme mit der Zeichenkodierung da QString UTF16 verwendet bzw. beim Aufruf der nativen funktion den string passend konvertiertEh OK
Ich hab nie was gegenQDesktopServices::openUrl
gesagt. Nur gegensystem
. Empfohlen hab ich es nicht, weil ich on Qt keine Ahnung habe. Dafür von WinAPI, daher meine EmpfehlungShellExecute (Ex)
zu verwenden.
-
@manni66, danke für den Hinweis. Ich habs geändert, leider ohne Erfolg.
ApplikationPfad ist das Verzeichnis der Anwendung und wird wie folgt ermittelt:
std::string strTemp = QCoreApplication::applicationDirPath().toStdString(); ApplikationPfad = QString::fromStdString(strTemp);
-
@DerDaVinciKot Ich weiß nicht ob Du es inzwischen hinbekommen hast, aber
#include <QApplication> #include <QUrl> #include <QDesktopServices> int main(int argc, char *argv[]) { QApplication app{ argc, argv }; auto app_dir{ QCoreApplication::applicationDirPath() }; auto url{ QUrl::fromLocalFile(app_dir + QStringLiteral("/Dies ist ein ... äh ... Beispieltitel.jpg")) }; QDesktopServices::openUrl(url); }
tut bei mir.
-
@Swordfish sagte in Videoclip mit Standardanwendung öffnen lassen:
auto app_dir = QCoreApplication::applicationDirPath(); QUrl url{ url.fromLocalFile(app_dir + QStringLiteral("/Dies ist ein ... äh ... Beispieltitel.jpg")) }; QDesktopServices::openUrl(url);
Dein Code funktioniert bei mir!
Aber komischerweise funktioniert es nicht, wenn ichQString app_dir = QCoreApplication::applicationDirPath();
in den Konstruktor packe und den Rest
QUrl url{ url.fromLocalFile(app_dir + ```cpp QStringLiteral("/Dies ist ein ... äh ... Beispieltitel.jpg")) }; QDesktopServices::openUrl(url);
In einen Button-Klick-Ereignis. Die Variable app_dir habe ich natürlich vorher in der Header-Datei deklariert:
private: QString app_dir;
Tue ich aber alle Anweidungen zusammen in das Button-Klick-Ereignis, dann funktioniert es! Hat jemand eine Idee?
-
@DerDaVinciKot
Wenn das so im Kontruktor steht:QString app_dir = QCoreApplication::applicationDirPath();
app_dir ist hier lokal.