V tomto díle se seznámíme s předdefinovanými dialogovými okny, ukážeme si jejich využití na jednotlivých příkladech. A dále se seznámíme s prací se soubory.
25.8.2009 00:00 | Martin Chudoba | přečteno 12211×
Tato třída se dá využít pro jednoduché uživatelské vstupy. Dělí se na vstupy celočíselné, desetinné, combobox výběry a textové vstupy.
Definice vstupu pro celé číslo:
První parametr ukazuje na hlavní objekt, který nám vyvolá naše okno. Druhý parametr je nadpis okna. Třetí pak nadepisuje pole vstupu. Čtvrtý nastavuje základní hodnotu. Pátý a šestý nastavuje hodní a dolní mez. Sedmý parametr nastavuje, o kolik se bude posouvat jeden krok. Posledním parametrem naší funkce je návratová hodnota (true nebo false).bool ok; int i = QInputDialog::getInt(this, tr("QInputDialog::getInteger()"), tr("Percentage:"), 25, 0, 100, 1, &ok); if (ok)
Definice vstupu pro desetinné číslo:
bool ok; double d = QInputDialog::getDouble(this, tr("QInputDialog::getDouble()"), tr("Amount:"), 37.56, -10000, 10000, 2, &ok);
Definice vstupu pro combobox seznam:
QStringList items; items << tr("Spring") << tr("Summer") << tr("Fall") << tr("Winter"); bool ok; QString item = QInputDialog::getItem(this, tr("QInputDialog::getItem()"), tr("Season:"), items, 0, false, &ok);
Definice vstupu pro textový vstup:
bool ok; QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"), tr("User name:"), QLineEdit::Normal, "", &ok);
Tento nástroj slouží k výběru barvy.
QColor color = QColorDialog::getColor(Qt::green, this);
Třída pro dialog výběru fontu písma.
bool ok; QFont font = QFontDialog::getFont(&ok, QFont(fontLabel->text()), this);
Tato třída nám umožní práci s výběrem otevírání souboru či souborů, s výběrem ukládacího souboru či výběrem složky v systému. Pokud jde o systém windows, máme na výběr použití nativního dialogu.
Definice pro výběr složky:
QFileDialog::Options options = QFileDialog::DontResolveSymlinks | QFileDialog::ShowDirsOnly; if (!native->isChecked()) options |= QFileDialog::DontUseNativeDialog; QString directory = QFileDialog::getExistingDirectory(this, tr("QFileDialog::getExistingDirectory()"), directoryLabel->text(), options); if (!directory.isEmpty()) ...
Definice pro otevření souboru:
QFileDialog::Options options; if (!native->isChecked()) options |= QFileDialog::DontUseNativeDialog; QString selectedFilter; QString fileName = QFileDialog::getOpenFileName(this, tr("QFileDialog::getOpenFileName()"), openFileNameLabel->text(), tr("All Files (*);;Text Files (*.txt)"), &selectedFilter, options); if (!fileName.isEmpty()) ...
Definice pro uložení souboru:
Tato definice je naprosto stejná s předcházejícími, pouze se použije metoda getSaveFileName.QFileDialog::Options options; if (!native->isChecked()) options |= QFileDialog::DontUseNativeDialog; QString selectedFilter; QString fileName = QFileDialog::getSaveFileName(this, tr("QFileDialog::getSaveFileName()"), saveFileNameLabel->text(), tr("All Files (*);;Text Files (*.txt)"), &selectedFilter, options); if (!fileName.isEmpty()) ...
Tato třída je velmi používaná. Jejím výstupem jsou dialogy kritických chyb, informačních a varovných dialogů, dotazových dialogů.
Definice pro kritickou chybu:
QMessageBox::StandardButton reply; reply = QMessageBox::critical(this, tr("QMessageBox::critical()"), "Chyba", QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore); if (reply == QMessageBox::Abort) criticalLabel->setText(tr("Abort")); else if (reply == QMessageBox::Retry) criticalLabel->setText(tr("Retry")); else criticalLabel->setText(tr("Ignore"));
Definice informační zprávy:
QMessageBox::StandardButton reply; reply = QMessageBox::information(this, tr("QMessageBox::information()"),"Informační zpráva");
Definice pro dotazový dialog:
QMessageBox::StandardButton reply; reply = QMessageBox::question(this, tr("QMessageBox::question()"), "Chcete smazat harddisk? ", QMessageBox::Yes | QMessageBox::No | MessageBox::Cancel);
Definice pro varující dialog:
QMessageBox msgBox(QMessageBox::Warning, tr("QMessageBox::warning()"),"Pozor toto je warning dialog", 0, this); msgBox.addButton(tr("Save &Again"), QMessageBox::AcceptRole); msgBox.addButton(tr("&Continue"), QMessageBox::RejectRole); if (msgBox.exec() == QMessageBox::AcceptRole) warningLabel->setText(tr("Save Again")); else warningLabel->setText(tr("Continue"));
errorMessageDialog->showMessage(tr("Ukázka použití..."));
Ukážeme si možnosti práce se soubory pomocí tohoto frameworku. Budeme potřebovat tyto třídy:
- QFile
- QTextStream
Vytvoříme si jednoduchou aplikaci založenou na dialogovém okně. Vložíme TextEdit a 3 tlačítka, které pojmenujeme Otevřít, Uložit a Ukončit.
Na stisk tlačítka uložit si nastavíme následující akci:
Využijeme zde dialogového okna pro ukládání souboru. Do konstruktoru třídy QFile vložíme jméno vybraného souboru. Vytvoříme soubor pomocí metody open a nastavíme, že se bude jednat o textový soubor. Pokud se nepovede vytvořit soubor, objeví se varovná zpráva a provádění funkce se ukončí. Pokud se povedlo otevřít soubor, předáme jeho ukazatel konstruktoru třídy QTextStream. Pomocí přetíženého operátoru << provedeme zápis do souboru. Pro načtení použijeme obrácený operátor >> a pro zvolení souboru využijeme metodu getOpenFileName.QFileDialog::Options options; options |= QFileDialog::DontUseNativeDialog; QString selectedFilter; QString fileName = QFileDialog::getSaveFileName(this, QString::fromUtf8("Ulo\305\276it"), "", tr("Text Files (*.fst)"), &selectedFilter, options); if (!fileName.isEmpty()) { if (fileName.indexOf(".fst") == -1) fileName += ".fst"; QFile file(fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, tr("FileStream"), QString::fromUtf8("Nemůžu zapisovat do souboru %1:\n%2.") .arg(fileName) .arg(file.errorString())); return; } QTextStream out(&file); QApplication::setOverrideCursor(Qt::WaitCursor); out << ui->textEdit->toPlainText(); QApplication::restoreOverrideCursor(); }
QFileDialog::Options options; options |= QFileDialog::DontUseNativeDialog; QString selectedFilter; QString fileName = QFileDialog::getOpenFileName(this, QString::fromUtf8("Otev\305\231\303\255t"), "", tr("Text Files (*.fst)"), &selectedFilter, options); if (!fileName.isEmpty()) { QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this, tr("FileStream"), QString::fromUtf8("Nemůžu otevřít soubor %1:\n%2.") .arg(fileName) .arg(file.errorString())); return; } QTextStream in(&file); QApplication::setOverrideCursor(Qt::WaitCursor); QString str; in >> str; ui->textEdit->setText(str); QApplication::restoreOverrideCursor(); }