Videoclip mit Standardanwendung öffnen lassen
-
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.
-
Oh man bin ich blind!
Vielen Dank, das war das Problem. Jetzt funktionieren auch Titel mit Umlauten und so viele Punkte wie ich mag
Ich hätte gedacht, das Qt mir einen Hinweis darauf gibt dass es bereits eine Variable mit selber Bezeichnung gibt. Da muss ich wohl in Zukunft genauer drauf achten!
Was bewirkt eigentlich folgendes:
applikationPfad + QStringLiteral
? Ich versteh die Erklärung aus der Qt-Dokumentation leider nicht ganz.
-
@DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:
Ich versteh die Erklärung aus der Qt-Dokumentation leider nicht ganz.
Hilft Strings and encodings in Qt?
-
Ja danke, das hat mir schon weitergeholfen. Ich kenne mich nur nicht so ganz mit den Formatierung aus, da muss ich mich nochmal reinfuchsen.