Strona 1 z 1

[SOLVED] QT4 - odpalanie wine z prefiksem

: 14 cze 2009, 17:05
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?

Odp: QT4 - odpalanie wine z prefiksem

: 15 cze 2009, 20:46
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() )

Odp: QT4 - odpalanie wine z prefiksem

: 15 cze 2009, 23:04
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?

Odp: QT4 - odpalanie wine z prefiksem

: 16 cze 2009, 01:55
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");

Odp: QT4 - odpalanie wine z prefiksem

: 16 cze 2009, 14:53
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!

Odp: QT4 - odpalanie wine z prefiksem

: 16 cze 2009, 15:28
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 \

Odp: QT4 - odpalanie wine z prefiksem

: 16 cze 2009, 16:41
autor: mikolajs
To tak na przyszłość, zamiana QString na const char*: moj_qstring.toStdString().c_str()

Odp: QT4 - odpalanie wine z prefiksem

: 16 cze 2009, 22:52
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.