QFileDialog - sprawdzanie rezultatu działania [Qt]

0

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().

0

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.

0

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).

0

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.

0

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.

0

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).

0

Problem wciąż aktualny.

2

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1