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().
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.
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).
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.
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.
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).
Problem wciąż aktualny.
To czytałes?
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.