Portál AbcLinuxu, 12. května 2025 17:17
void WelcomeWin::on_pb_browse_clicked() { fdlg = new QFileDialog(this, QString(tr("Vyberte adresář s testovými obrázky")), QDir::currentPath()); connect(fdlg, SIGNAL(fileSelected(const QString)), this, SLOT(on_fdlg_fileSelected(const QString))); /* We are setting a data directory, use Directory mode */ fdlg->setFileMode(QFileDialog::Directory); fdlg->setOptions(QFileDialog::ReadOnly); fdlg->setNameFilter(QString("Soubory JPEG(*.jpg *.jpeg)")); fdlg->exec(); }Sice to funguje, ale v QFileDialogu se zobrazují jen adresáře. Filtr je určitě v pořádku, v režimu AnyFile filtruje správně. Je zajímavé, že stejný program přeložený na Windows s Qt 4.7.4 funguje v pohodě, ale na Archu s Qt 4.8.1 se v režimu Directory zobrazují jen adresáře. Dělám něco špatně, nebo jsem trefil na bug v linuxové verzi file dialogu?
QString QFileDialog::getExistingDirectory ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly )
[static]
je to obecně jednodušší. Tj.:
QString dirname = QFileDialog::getExistingDirectory(parent,
tr("Vyberte adresář s testovými obrázky"),
QDir::currentPath(),
QFileDialog::ReadOnly);
jestli to bude fungovat. Kdyžtak si pohraj s Options.
Vypadá to, že problém je vyřešen. Sice ne zcela k mé spokojenosti, nicméně jde nejspíš o problém v nativním file dialogu KDE. Na Windows i Ubuntu Oreinic (oboje s Qt 4.7.4) se použije filedialog z Qt, který funguje dle očekávání. Pokud použiju setOption(QFileDialog::DontUseNativeDialog), funguje to i v KDE.
Mohl byste někdo výše uvedený kód zkusit na mašině s KDE/Qt ve verzi nižší než 4.8.2, resp. 4.8.1? Zajímalo by mě, jestli jde o bug nebo jestli file dialog z KDE požadovanou vlastnost prostě neumí. Díky.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.