作者及原代码链接:跟小豆君学Qt
跟着学习;完整实现代码;示例截图;
QDialog: 对话窗口的基类
标准对话框:
QInputDialog / QColorDialog / QFontDialog / QFileDialog / QMessageBox / QProgressDialog / QWizard
头文件:
#include <QInputDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QFileDialog>
#include <QMessageBox>
#include <QDebug>
#include <QProgressDialog>
#include <QWizard>
输入对话框
实现:
void Widget::on_btn_getint_clicked()
{
bool ok;
// params: dialogTitle, question, default, minNum, maxNum, step, checked_OK
int i = QInputDialog::getInt(this, tr("情况"), tr("几岁毕业"), 25, 16, 100, 1, &ok);
if(ok){
ui->label->setText(tr("%1").arg(i));
}
}
void Widget::on_btn_getdouble_clicked()
{
bool ok;
double d = QInputDialog::getDouble(this, tr("工作"), tr("薪水"), 1000, 100, 10000, 1, &ok);
if (ok){
ui->label->setText(QString("%1").arg(d));
}
}
void Widget::on_btn_getitem_clicked()
{
QStringList items;
items<<tr("LOL")<<tr("Dota")<<tr("Dota2");
bool ok;
QString item = QInputDialog::getItem(this, tr("game"), tr("Which do you play?"), items, 0, false, &ok);
if(ok && !item.isEmpty()){
ui->label->setText(item);
}
}
void Widget::on_btn_gettext_clicked()
{
bool ok;
// params: this, dialogTitle, question, widget, default, checked_OK
QString text = QInputDialog::getText(this, tr("promote"), tr("want to change?"), QLineEdit::Normal, tr("lazy"), &ok);
if(ok && !text.isEmpty()){
ui->label->setText(text);
}
}
颜色对话框
实现:
void Widget::on_getColor_clicked()
{
QColorDialog::ColorDialogOptions option;
if(ui->check_alpha->isChecked()){
option = QColorDialog::ShowAlphaChannel;
}
const QColor color = QColorDialog::getColor(Qt::magenta, this, "choose color", option);
if(color.isValid()){
ui->getColor->setText(color.name());
ui->getColor->setPalette(QPalette(color));
ui->getColor->setAutoFillBackground(true);
}
}
文件对话框
实现:
void Widget::on_btn_dir_clicked()
{
QString directory = QFileDialog::getExistingDirectory(this, tr("get dir"), "./");
if(!directory.isEmpty()){
ui->line_path->setText(directory);
}
}
void Widget::on_btn_file_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("open a file"), "./", tr("All Files(*);;Text Files (*txt)"));
if (!fileName.isEmpty()){
ui->line_path->setText(fileName);
}
}
void Widget::on_btn_files_clicked()
{
QStringList files = QFileDialog::getOpenFileNames(this, tr("open files"), "./", tr("All files (*);;Text Files (*.txt)"));
if(files.count()){
ui->line_path->setText(QString("[%1]").arg(files.join(", ")));
}
}
void Widget::on_btn_savefile_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("save file"), "./", tr("all files(*);; Text files (*.txt)"));
if(!fileName.isEmpty()){
ui->line_path->setText(fileName);
}
}
字体对话框:
实现:
void Widget::on_getFont_clicked()
{
bool ok;
QFont font = QFontDialog::getFont(&ok, ui->label_2->font(), this, tr("choose font"));
if(ok){
ui->label_2->setFont(font);
}
}
消息对话框
实现:
void Widget::on_btn_critical_clicked()
{
// params: windowTitle, msg, choice1,choice2, choice3
QMessageBox::critical(this, tr("dangerous"), tr("fix danger"),
tr("return"), tr("walk"), tr("ignore"));
}
void Widget::on_btn_info_clicked()
{
// params: windowTitle, msg, info1, info2, info3
QMessageBox::information(this, tr("info"), tr("girlfriend?"), tr("impossible"), tr("really impossible"), tr("totally impossible"));
}
void Widget::on_btn_question_clicked()
{
QMessageBox::question(this, tr("question"), "good shape or beauty",
QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
}
void Widget::on_btn_warning_clicked()
{
QMessageBox msgBox(QMessageBox::Warning, tr("warning"), "don't flirt gf", 0, this);
msgBox.setDetailedText(("plz don't"));
msgBox.addButton(tr("Save &Again"), QMessageBox::AcceptRole);
msgBox.addButton(tr("&Continue"), QMessageBox::RejectRole);
if(msgBox.exec() == QMessageBox::AcceptRole){
qDebug()<<"accept";
}
}
void Widget::on_btn_message_clicked()
{
message.showMessage(tr("wrong info"));
}
进度对话框
实现:
void Widget::on_btn_progress_clicked()
{
int numFiles = 50000;
QProgressDialog progress("file is copying...", "interupt", 0, numFiles, this);
progress.setWindowModality(Qt::WindowModal);
progress.show();
for(int i = 0; i<numFiles; ++i){
progress.setValue(i);
QCoreApplication::processEvents();
if(progress.wasCanceled()){
break;
}
progress.setValue(numFiles);
}
}
向导对话框
实现:
void Widget::on_btn_wizard_clicked()
{
QWizard w(this);
w.setWindowTitle("guide");
QWizardPage* page1 = new QWizardPage();
QWizardPage* page2 = new QWizardPage();
QWizardPage* page3 = new QWizardPage();
page1->setTitle("First step");
page2->setTitle("second step");
page3->setTitle("third step");
w.addPage(page1);
w.addPage(page2);
w.addPage(page3);
w.exec();
}