Qt标准对话框:8大对话框详解

1、颜色选择对话框

颜色对话框类 QColorDialog 提供了一个可以获取指定颜色的对话框的对话框部件:

//添加头文件
#include <QColorDialog>

//getColor的3个参数分别是:设置初始颜色、父窗口、和对话框标题
QColor color = QColorDialog::getColor(Qt::red, this, "Color dialog");
qDebug()<<"color"<<color;

这里使用 QColorDialog 的静态函数 getColor () 来获取颜色,执行时弹出颜色选择对话框:

返回的是一个 QColor 类型的数据:

这四个数值分别代表:透明度(alpha)、Red、Green、Blue。它们的默认值都是 0.0~1.0,有效数字为 6 位,对于 alpha 来说,1.0 表示完全不透明,0.0 表示完全透明。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

还可以通过创建对象的方式创建颜色对话框:

QColorDialog dialog(Qt::red,this);
dialog.setOption(QColorDialog::ShowAlphaChannel);
dialog.exec();
QColor color = dialog.currentColor();
qDebug()<<"color"<<color;

效果与前面使用静态方法的一样。

二、字体对话框

字体对话框 QFontDialog 类提供了一个可以选择字体的对话框部件:

#include <QFontDialog>

//ok is a sign to mark what you chosen(OK or Calcel)
bool ok;
QFont font = QFontDialog::getFont(&ok,this);
if(ok) {    //choose OK
    ui->pushButton_2->setFont(font);
} else {    //choose cancel
    qDebug()<<"Cancel";
}

这里通过静态函数来选择字体,如果在字体对话框中单击了 OK,那么 ok=true;如果单击了 Cancel,那么 ok=false。

 

三、输入对话框

输入对话框 QInputDialog 类用来提供一个简单方便的对话框,从用户哪里去一个单一的数值或字符串。

//头文件
#include <QInputDialog>


bool ok;
//gain stirng
//getText()参数:指定父窗口、设置窗口标题、设置对话框中的标签的显示文本、
//输入字符串的显示模式(例如密码显示小黑点)、设置输入框中的默认字符串,按钮信息
QString string = QInputDialog::getText(this, "Input string Dialog",
                     "please input user name:", QLineEdit::Normal,
                     "admin", &ok);
if(ok) {
    qDebug()<<"stirng:"<<string;
}

//gain int
int valueInt = QInputDialog::getInt(this, "Input Int Dailog",
                   "please input a value between -1000 and 1000",
                   100, -1000, 1000, 10, &ok);
if(ok) {
    qDebug()<<"valueInt:"<<valueInt;
}

//gain float
double valueDouble = QInputDialog::getDouble(this, "Input Double Dialog",
                         "please input a value between -1000 and 1000",
                         0.00, -1000, 1000, 2, &ok);
if(ok) {
    qDebug()<<"valueDouble:"<<valueDouble;
}
QStringList items;
items<<"item1"<<"item2";

//gain items
QString item = QInputDialog::getItem(this, "Input Item Dialog",
                   "please choose a item:", items, 0, true, &ok);
if(ok) {
    qDebug()<<"item:"<<item;
}

显示如下:

输入后,显示结果为:

四、进度对话框

进度对话框 QProgressDialog 对一个耗时较长的操作进度提供了反馈。

#include <QProgressDialog>

QProgressDialog dialog("copy progress", "Cancel", 0, 50000, this);
dialog.setWindowTitle("Progress Dialog");   //set window title
dialog.setWindowModality(Qt::WindowModal);  //set dialog modal
dialog.show();
//演示复制进度
for(int i = 0; i < 50000; ++i) {
    dialog.setValue(i);                 //设置进度条当前值
    QCoreApplication::processEvents();  //避免界面冻结
    if(dialog.wasCanceled()) {          //按下取消键则中断
        break;
    }
}
dialog.setValue(50000);     //显示100%
qDebug()<<"copy finish";

效果:

 

五、错误信息对话框

QErrorMessage 类提供了一个显示错误信息的对话框:

#include <QErrorMessage>

QErrorMessage *dialog = new QErrorMessage(this);
dialog->setWindowTitle("Error mesage Dialog");
dialog->showMessage("This is error message.");

显示:

 

五、文件对话框

5.1. 选择打开一个文件

文件对话框 QFileDialog 提供了一个用户选择文件或文件夹的对话框:

#include <QFileDialog>

//getOpenFileName()函数用来获取选择的文件名,参数:指定父窗口、设置标题、默认打开目录、文件类型过滤器。
QString fileName = QFileDialog::getOpenFileName(this, "File Dialog",
                                                    "/home/daowm/", "Picture(* png * jpg)");
qDebug()<<fileName;

运行程序显示:

可以设置多个不同类别的过滤器,不同类别间使用两个分号 “;;” 隔开,例如:

QString fileName = QFileDialog::getOpenFileName(this, "File Dialog", "/home/daowm/",
                                                    "Picture(* png * jpg);;TextFile(* txt)");

5.2. 打开多个文件

可以使用 getOpenFileNames () 函数选择多个文件:

#include <QFileDialog>

QStringList fileNames = QFileDialog::getOpenFileNames(this, "File Dialog", "/home/daowm/",
                                                    "Picture(* png * jpg);;TextFile(* txt)");
qDebug()<<fileNames;

得到的 fileNames 为:

 

5.3. 使用 getSaveFileName () 来实现保存文件对话框

5.4. 使用 ExistingDirectory () 函数来获取一个已存在的文件夹路径

六、消息对话框

QMessageBox 类提供一个模态对话框来通知用户一些信息,或者向用户提出一个问题并获取答案。

#include <QMessageBox>


//question Dialog
int ret1 = QMessageBox::question(this, tr("Question Dialog"), tr("Do you know Qt?"),
                                 QMessageBox::Yes,QMessageBox::No);
if(ret1 == QMessageBox::Yes){
    qDebug()<<tr("Question!");
}

//Information Dialog
int ret2 = QMessageBox::information(this, tr("Information Dialog"), tr("This is Qt!"),
                                    QMessageBox::Ok);
if(ret2 == QMessageBox::Ok){
    qDebug()<<tr("Information!");
}

//Warning Dialog
int ret3 = QMessageBox::warning(this, tr("Warning Dialog"), tr("1111"),
                                QMessageBox::Abort);
if(ret3 == QMessageBox::Abort) {
    qDebug()<<tr("Warning!");
}

//Critial Dialog
int ret4 = QMessageBox::critical(this, tr("Critial Dailog"), tr("Find a critial question!"),
                                 QMessageBox::YesAll);
if(ret4 == QMessageBox::YesAll) {
    qDebug()<<tr("Critial!");
}

//About Dialog
QMessageBox::about(this, tr("About Dialog"), tr("This is a About Dialog!"));

显示:

 

七、向导对话框

QWizard 类提供了一个设计向导界面的框架。

//添加头文件
#include <QWizard>


//在窗口的头文件中添加函数声明:
private:
    QWizardPage *createPage1();
    QWizardPage *createPage2();
    QWizardPage *createPage3();


//实现这三个函数
QWizardPage * Widget::createPage1()    //wizard page 1
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("Introduce"));
    return page;
}

QWizardPage * Widget::createPage2()   //wizard page 2
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("Select Information"));
    return page;
}

QWizardPage * Widget::createPage3()   //wizard page 3
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("Finish"));
    return page;
}


//执行向导
QWizard wizard(this);
wizard.setWindowTitle(tr("Wizard Dialog"));
wizard.addPage(createPage1());    //add wizard page
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();

显示如下:

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值