[Qt]Błąd mainwindow.obj, manifest i Character Set

Witam.

Otóż kompilując program w QT Creator, wywala mi błąd mainwindow.obj.

int rejestruj()

{

        CHAR wartosc[]="%programfiles\\COSS\\COSS.EXE"; //łańcuch znaków z zapisywana wartością w kluczu

        RECT rect;

        GetWindowRect(NULL,&rect);

        RegCreateKeyExA(

                        HKEY_LOCAL_MACHINE,//Main Registry Root

                        "Software\\Microsoft\\Windows\\CurrentVersion\\Run",//Sub

                        0,//Reserved

                        0,//class

                        REG_OPTION_NON_VOLATILE,

                        KEY_ALL_ACCESS,

                        NULL,

                        &hParent,

                        &Dis);

        RegSetValueExA(hParent,"Module",0,REG_SZ,(LPBYTE)wartosc,sizeof(wartosc));

                RegCloseKey(hParent);

        return 0;

}

Błąd:

mainwindow.obj:-1: błąd:LNK2019: unresolved external symbol __imp__ GetWindowRect@8 referenced in function "int __cdecl rejestruj(void)" (?rejestruj@@YAHXZ)

Pytanie drugie: W Visual Studio, jeżeli chciałem zamienić z Unicode Character Set na Multibyte Character Set, wystarczyło tylko wejść w opcje projektu. W QT Creator nie doszukałem się takiej opcji. Po szperaniu w google, podobno nie ma takiej opcji(qmake interpretuje tylko unicode).

Pytanie trzecie: Jak dodać manifest do projektu w QT Creator?

  1. Nie zlinkowałeś do jakiejś zewnętrznej biblioteki. Jakim kompilatorem kompilujesz? Visual C++?

  2. Kodowanie. UTF-8 jest optymalny i uniwersalny.

Manifest potrzebny ci do czego? Pliki .rc dodajesz poprzez win32:RC_FILE += plik.rc

Kompiluje w QT Creator(MSVC2008). Gdy wpisze kod w Visual’u to kompiluje się wszystko elegancko i działa, natomiast ten sam kod w QT Creator wywala błąd jaki napisalem powyżej.

Manifest jest mi potrzebny do ustalenia, aby program był uruchamiany jako administrator ;). No chyba że poda mi ktoś jakąś funkcje Qt, która zrobi to za mnie, bez szperania w manifestach.

Bo to nie kod jest winny, tylko użyte funkcje w porównaniu do opcji kompilacji. Nie linkujesz odpowiednich bibliotek. Z tego co znalazłem (dla zapytania “qt windows api linking”):

http://stackoverflow.com/questions/2676 … in32-mingw

Program się kompiluje :slight_smile:

A masz może sposób Qt-owski na otwieranie aplikacji automatycznie jako admin? Bo domyślam się, że manifesty nie są bardzo chętne na edytowanie w QT :wink:

Qt jest bibliotek przenośną i raczej nie ma w niej za wiele funkcji dla konkretnych systemów, jest tylko tyle ile jest potrzebne.

W przypadku linuksa po prostu uruchamia się program przez sudo(user który nie wie co to jest, powinien nie włączać takich programów), w przypadku windowsa po prostu uruchomić jako administrator, system chyba nie pozwoli wykonać operacji bez praw.

Przez komendę nie wiem jak to można zrobić, bo w przypadku linuksa można po prostu na samym początku maina sprawdzić czy ma prawa i jeśli nie ma, to po prostu przez funkcję system odpalić ten program poprzedzając np. gksu (graficzny “loger” sudo), na windowsie nie wiem czy tak by się dało.

No właśnie sam napisałem taką funkcję, że jeżeli nie ma dostępu do jakiegoś tam pliku systemowego to ma wyskakiwać komunikat o błędzie i zakończyć program. Lecz ja nie chcę, aby tak to działało. Zapragnołem sobie, aby program wymuszał uruchomienie z prawami admina ;p. Gdy googlowałem jedyną odpowiedzią, którą sprawdziłem i działa jest edycja manifestu. I znowu w Visual Studio edycja takiego czegoś to pestka, ale w Qt to chyba coś trudniejszego. Zresztą sam siedzę w Qt dopiero gdzieś od tygodnia :wink: