[SOLVED] QT4 - odpalanie wine z prefiksem

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
PL_kolek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 30 sty 2008, 21:46
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

[SOLVED] QT4 - odpalanie wine z prefiksem

Post autor: PL_kolek »

Witam!
Kiedyś dawno temu potrzebowałem zainstalować Half-Life 2 na innym prefiksie w wine, co wydało mi się skomplikowane (długie komendy). Postanowiłem sobie napisać skrypt w bashu, który wszystko by zautomatyzował. Gdy doszedłem do momentu, w którym co umiałem to skończyłem, czego nie umiałem to nie zrobiłem odnalazłem PlayOnLinux i zobaczyłem że wymyślam koło na nowo. Oczywiście mnie to nie zniechęciło, a wręcz zachciałem zrobić to samo w wersji okienkowej. Od jakiś 2 godzin przypominam sobie QT i jakoś szło.

I teraz mam taki problem. Mam fragment kodu:

Kod: Zaznacz cały

	
QString pref;
QStringList arguments;
pref="WINEPREFIX=\"/home/kolzi/.wine-"+ui.prefixLineEdit->text()+"/\"";
arguments << pref << "winecfg";
QProcess *myProcess = new QProcess;
myProcess->setProcessChannelMode(QProcess::MergedChannels);
myProcess->setStandardOutputFile("log.txt");
myProcess->start("env", arguments);
To miało odpalać instalator programu, ale że nie chciało działać, to uprościłem wszystko by szukać błedu. Aktualnie to odpala winecfg z odpowiednim prefiksem i zapisaniem logu. A log wypluł mi coś takiego:

Kod: Zaznacz cały

wine: invalid directory "/home/kolzi/.wine-hl/" in WINEPREFIX: not an absolute path
Co wywolało moje duze zdziwienie, bo wywołanie:

Kod: Zaznacz cały

env WINEPREFIX="/home/kolzi/.wine-hl/" winecfg
w terminalu działa. Co tu może być nie tak?
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: QT4 - odpalanie wine z prefiksem

Post autor: mikolajs »

Spróbuj użyć standardowego system(), Z QProcess też miałem problemy z ustawieniem prawidłowego katalogu roboczego. (katalog domowy pobierz QDir::homePath() )
Awatar użytkownika
PL_kolek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 30 sty 2008, 21:46
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: QT4 - odpalanie wine z prefiksem

Post autor: PL_kolek »

system() z normalnego C++? Staram się to obsłużyć, ale niestety idzie opornie - wprowadza standardowe typy, a staram się robić na typach QT i już mam problem z konwersja QString na tablicę charów by to odpalić. Pomożesz?
Awatar użytkownika
mario_7
Administrator
Administrator
Posty: 8602
Rejestracja: 30 sie 2006, 13:11
Płeć: Mężczyzna
Wersja Ubuntu: 20.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: QT4 - odpalanie wine z prefiksem

Post autor: mario_7 »

To te cudzysłowy coś mieszają.

Poza tym mógłbyś skorzystać ze zmiennych środowiskowych w QProcess - niby na jedno wychodzi, ale jednak... :P

Kod: Zaznacz cały

    QStringList env = QProcess::systemEnvironment();
    env << "WINEPREFIX=/home/kolzi/.wine-"+ui.prefixLineEdit->text()+"/";
    QProcess *myProcess = new QProcess;
    myProcess->setProcessChannelMode(QProcess::MergedChannels);
    myProcess->setStandardOutputFile("log.txt");
    myProcess->setEnvironment(env);
    myProcess->start("winecfg");
Awatar użytkownika
PL_kolek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 30 sty 2008, 21:46
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: QT4 - odpalanie wine z prefiksem

Post autor: PL_kolek »

Dzięki wielkie mario_7!
Tak naprawdę to jest mój drugi program w QT poza tutorialem, po pół roku od napisania pierwszego, więc nie mam obcykanych funkcji i obiektów tak naprawdę - co wygoogluję to używam. To samo tyczy się konsoli - podstawowe rzeczy potrafię zrobić, ale np. co to jest to env to nie wiedziałem (już wiem!) i czy muszą być te cudzysłowy. Polecenie spisałem z opisu wine na Ubuntowej stronie o grach i zaadaptowałem do programu. Teraz pozostaje mi tylko poczytać systemEnvironment(), skończyć program i może się nim podzielić.

Jeszcze raz dzięki!
Awatar użytkownika
mario_7
Administrator
Administrator
Posty: 8602
Rejestracja: 30 sie 2006, 13:11
Płeć: Mężczyzna
Wersja Ubuntu: 20.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: QT4 - odpalanie wine z prefiksem

Post autor: mario_7 »

Cudzysłowy nie są potrzebne, ale pamiętaj, że jeśli ma się pojawić jakaś spacja w nazwie katalogu, to musi być poprzedzona znakiem \
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: QT4 - odpalanie wine z prefiksem

Post autor: mikolajs »

To tak na przyszłość, zamiana QString na const char*: moj_qstring.toStdString().c_str()
Awatar użytkownika
PL_kolek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 30 sty 2008, 21:46
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: QT4 - odpalanie wine z prefiksem

Post autor: PL_kolek »

Wiedziałem, że coś prostego będzie ;). Mimo że już nieważne, udało się z typami wbudowanymi w QT, to i tak dzięki. W międzyczasie udało mi się rozwiązać problem, z którym już miałe4m zamiar lecieć na forum, więc zbliżam się do końca pisaniny. Całkiem przyjemnej zresztą, bo im więcej używam QT, tym bardziej przekonuję się jak rozbudowane i intuicyjne to jest.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 30 gości