Witam. Chciałbym sprawdzić, jaki przycisk został wciśnięty przez użytkownika w QFileDialogu (żeby wstawić to do ifa). Googlowałem sporo, ale nie znalazłem nic, co by działało. Okienko dialogu wyświelam funkcją getOpenFileName().

- Rejestracja:prawie 13 lat
- Ostatnio:prawie 4 lata
Masz na myśli przyciski OK i Anuluj? Jeśli tak, to w przypadku wybrania pliku za pomocą tego okna dialogowego, getOpenFileName() zwraca stringa ze ścieżką do wybranego przez Ciebie pliku. Jak nic nie wybierzesz, to funkcja zwróci po prostu pusty string.
http://qt-project.org/doc/qt-4.8/qfiledialog.html#getOpenFileName
Dla przykładu:
QString fileName = QFileDialog::getOpenFileName(this, "Wybierz se jakiś pliczek", QDir::currentPath() ) ;
if (fileName.isEmpty() ) // nie wybrałeś w tym przypadku nic, czyli wcisnąłeś Anuluj
{
return ;
}
// Dalej robisz z wybranym plikiem, co chcesz.
A jeżeli nie, to sorry za odpowiedź nie na temat i wówczas napisz, co dokładnie masz na myśli.
- Rejestracja:ponad 10 lat
- Ostatnio:około 3 godziny
- Postów:148
Tak, chodzi mi o przyciski Ok i Anuluj. Ta metoda w moim przypadku nie zadziała - jeśli użytkownik wybierze plik z rozszerzeniem .exe i wciśnie 'Ok', to funkcja tak samo jak w przypadku wciśnięcia 'Anuluj' zwróci pusty string (chcę reagować właśnie w przypadku wybrania pliku z rozszerzeniem .exe, dlatego po prostu muszę wiedzieć kiedy został wciśnięty jaki przycisk).

- Rejestracja:prawie 13 lat
- Ostatnio:prawie 4 lata
Spróbuj się pobawić ze sygnałami accepted() i rejected(). Ten pierwszy to zostanie wyemitowany w przypadku wciśnięcia OK, w pozostałych przypadkach ten drugi.
http://qt-project.org/doc/qt-4.8/qdialog.html#accepted
http://qt-project.org/doc/qt-4.8/qdialog.html#rejected
Natomiast coś mi tu nie gra. Naprawdę funkcja Ci nie zwraca ścieżki, gdy wybierzesz exeka? Pokaż kod, jeżeli możesz, bo może tam tkwi problem.

- Rejestracja:około 17 lat
- Ostatnio:10 minut
Wymyślasz coś dziwnego. Naciśniecie "ok" ma zawsze takie samo zachowanie bez względu na rozszerzenie pliku, bo dialog nie wie co chcesz z tym plikiem zrobić, np może chcesz uruchomić ten plik za pomocą QProces
. Przynajmniej ja nie widzę powodu, dla którego plik *.exe miałby być traktowany inaczej.
Pokaż dokładnie swój kod i wyjaśnij co chcesz uzyskać/co ci nie działa i co ustaliłeś za pomocą debugowania.
- Rejestracja:ponad 10 lat
- Ostatnio:około 3 godziny
- Postów:148
Naciśnięcie 'Ok' nie zwraca mi ścieżki do pliku (pewnie dlatego, że mam ustawiony filtr na pliki *.otf
). Zależy mi na tym, żeby wybranie pliku z rozszerzeniem *.exe
skutkowało wywaleniem MessageBoxa. Oto kod:
QFileDialog dialog(this);
QString fileName = dialog.getOpenFileName(this, tr("Dodaj czcionkę..."), "", tr("Czcionki (*.otf)"));
if(/*jeśli użytkownik wcisnął 'Ok' &&*/ fileName.toStdString().find(".otf") == string::npos)
{
QMessageBox error(this);
error.setText("Nie można otworzyć pliku (błędny format)");
error.exec();
}
Za pomocą debuggera nie ustaliłem nic (nie pokazuje mi zmiennych).

- Rejestracja:ponad 10 lat
- Ostatnio:ponad 5 lat

- Rejestracja:około 17 lat
- Ostatnio:10 minut
WTF skoro masz założony filtr *.otf
to nie powinno ci pokazywać plików *.exe
.
Może spróuj tak i napisz co dostajesz w logach:
QFileDialog dialog(this);
QString filter;
QString fileName = dialog.getOpenFileName(this,
tr("Dodaj czcionkę..."),
"",
tr("Czcionki (*.otf)"),
&filter);
qDebug() << "file:" << fileName << fileName.isNull() << " selected filter " << filter << filter.isNull();
Może wartość filter
pomoże.