Videoclip mit Standardanwendung öffnen lassen



  • Mit Qt hätte ich auf QDesktopServices getippt. Das ist dann auch Crossplattform, falls es mal nicht Windows sein soll.



  • @DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:

    Der Dateipfad der Videodatei muss in Anführungszeichen eingebettet sein.

    Nur wenn er Leerzeichen enthält.



  • Unter Windows gibt es die ShellExecute Funktion bzw. ein paar weitere Funktionen aus der Familie. Mit "open" als loOperation sollte Windows die Standardanwendung für die Datei finden und die Datei damit öffnen.



  • Danke für Eure Tipps!

    Ein anderes Problem:
    Ich möchte ein Bild in ein QLabel laden. Grundsätzlich kein Problem wenn ich den kompletten Pfad angebe. Wenn ich die Datei aber aus Release-Ordner laden will, funktioniert das nicht.

    Beispiel:
    ich stelle Qt-Ausführung auf "Release" ein. Im Release-Ordner füge ich nun zwei Ordner - Ordner1 und Ordner2 ein. Der Ordner2 befindet sich in Ordner1. Und im Ordner2 befindet sich die Bilddatei.

    Die Bild-Datei befindet sich also in:
    Build-ReleaseOrdner/Release/Ordner1/Ordner2/Bild.jpg

    Ich kann aber anscheinend nicht darauf zugreifen bzw. irgendwo ist noch ein Fehler:

    QImage image("Ordner1\\Ordner2\\Bild.jpg");
        ui->imgLabel->setPixmap(QPixmap::fromImage(image));
        ui->imgLabel->resize(300, 300);
    
    Was habe ich falsch gemacht?
    

    Ich habe den Fehler gefunden. Ausgangspunkt ist nicht der release-Ordner sondern der Build-Release Ordner (also der übergeordnete Ordner). Richtig wäre also:

    QImage image("release\\Ordner1\\Ordner2\\Bild.jpg");
    

    Jetzt stellt sich mir aber eine andere Frage: Wie wird das am Ende in der Praxis umgesetzt? Nehmen wir mal an, das Programm ist soweit fertig und soll außerhalb von Qt genutzt werden. Dann fällt doch der release-Ordner weg? Richtig wäre ja z.B.:

    "Hauptordner_mit_Anwendung\Ordner1\Ordner2"

    Dann ist die Anweisung

    QImage image("release\\Ordner1\\Ordner2\\Bild.jpg");
    

    aber wieder nutzlos, da es keinen release-Ordner gibt. Irgendwie habe ich gerade einen Knoten.

    Ich habe es jetzt mit QCoreApplication::applicationDirPath() gelöst.



  • @DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:

    Ein anderes Problem:

    Anderes Problem, anderer Thread.



  • @DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:

    Ich habe es jetzt mit QCoreApplication::applicationDirPath() gelöst.

    👍
    Genau so macht man das auch.
    Denn du willst ja nicht vom "working directory" abhängig ein mit dem dein Programm gestartet wurde. Denn das muss nicht das selbe Verzeichnis sein wo deine .exe liegt.



  • Gibt es eigentlich bestimmte Zeichen die man nicht verwenden darf um eine Datei bzw. in meinem Fall ein Videoclip per

    system()
    

    zu öffnen? Mir ist aufgefallen, das Dateien mit Umlauten im Titel nicht geöffnet werden können. Das mit den Umlauten klingt ja noch plausibel, aber mir ist aufgefallen das Titel mit mehreren Punkten (z.B. "Dies ist ein ... Beispieltitel") ebenfalls nicht geöffnet werden. Gibt es dafür eine Erklärung?



  • system("foo bar baz.mp4") macht so ziemlich das selbe wie wenn du foo bar baz.mp4 in der Kommandozeile eintippst.
    Da hier Leerzeichen enthalten sind, wird Windows also nach einem Programm namens foo suchen - und vermutlich keines finden.

    Wenn du willst dass das Video foo bar baz.mp4 geöffnet wird, musst du dem ganzen nochmal ein Paar Anführungszeichen spendieren: system("\"foo bar baz.mp4\"")

    Mit den Punkten sollte das normalerweise nichts zu tun haben.

    Davon abgesehen würde ich dir empfehlen ShellExecute/ShellExecuteEx statt system zu verwenden.



  • Ich hatte es ja mit Anführungszeichen versucht. Aber bei Titeln mit Umlauten oder mehreren Punkten (...) funktionert es komischer Weise nicht. Ich habe das mehrmals überprüft und auch keine Tippfehler gemacht. Sobald ich die drei Punkte oder Umlaute entferne, funktioniert alles wunderbar.



  • Ja, pfuh, keine Ahnung.
    Aber wie gesagt: nimm ShellExecute/ShellExecuteEx.



  • Wenn eh Qt verwendet wird, dann gibt es auch was von Qt
    QDesktopServices::openUrl



  • @DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:

    aber mir ist aufgefallen das Titel mit mehreren Punkten (z.B. "Dies ist ein ... Beispieltitel") ebenfalls nicht geöffnet werden. Gibt es dafür eine Erklärung?

    #include <cstdlib>
    int main()
    {
    	std::system("\"Dies ist ein ... Beispieltitel.jpg\"");
    }
    

    tut bei mir genau was es soll.

    @DerDaVinciKot sagte in Videoclip mit Standardanwendung öffnen lassen:

    Mir ist aufgefallen, das Dateien mit Umlauten im Titel nicht geöffnet werden können.

    und

    #include <cstdlib>
    int main()
    {
    	std::system("\"Dies ist ein ... äh ... Beispieltitel.jpg\"");
    }
    

    das auch.



  • Sehr interessant! Mal wieder so ein mysteriöses Phänomen. Sowas macht mich verrückt! Danke für die Mühe. Ich werde mal schauen ob ich es mit ShellExecute hinbekomme, ansonsten muss ich halt auf Umlaute und die pööhsen Punkte verzichten.

    Aber mal ein anderes Thema zur Abwechslung:
    Kann mir jemand verraten, wie ich ein Icon für das Desktop-Symbol meiner Anwendung setzen kann, so dass ich nicht immer dieses Standard Symbol auf dem Desktop sehe, sondern ein eigenes? Damit meine ich nicht das windowIcon, sondern welches man im Explorer sehen kann.

    Danke 🙂



  • @DerDaVinciKot Generell gilt: Eine Frage/ein Thema pro Thread und ein Thread pro Frage/Thema.

    Shell Links - Creating a Shortcut and a Folder Shortcut to a File
    IShellLinkA interface (shobjidl_core.h)



  • @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?


Anmelden zum Antworten