Qt学习之路11--Qt标准对话框(颜色对话框和输入对话框)

在上一篇里面,学习了两种Qt提供的标准对话框,消息对话框和文件对话框,消息对话框用于向用户提示信息;文件对话框用户获取用户选择的文件路径。
今天继续学习 Qt提供的其他两种对话框,颜色对话框和输入对话框。

颜色选择对话框

颜色对话框用于指定颜色,常规使用方式遵循三板斧原则:创建对象后指定父组件并设置属性、模态调用exec()、根据返回值选择执行流程。
Qt中以QColor类来表示颜色的概念,它支持多种颜色表示方式。
- RGB:以红、绿、蓝为基准的三色模型。
- HSV:以色调、饱和度、明度表示的六角椎体模型。
- CMYK:以天蓝、品红、黄色、黑色为基准的全彩印刷色彩模型。
根据三板斧的方式使用如下:

    QColorDialog dia(this);
    dia.setWindowTitle("Color Editor");
    dia.setCurrentColor(Qt:: red);//常值传递const引用
    //dia.setCurrentColor(QColor(100,100,100));//通过生成临时对象来设置RGB初始参数
    if(dia.exec() == QColorDialog::Accepted )
    {
        QColor color = dia.selectedColor();

        qDebug() << color;
        qDebug() << color.red();
        qDebug() << color.green();
        qDebug() << color.blue();
        qDebug() << color.hue();
        qDebug() << color.saturation();
        qDebug() << color.value();
    }

当运行程序后会弹出一个颜色选择对话框:
Qt学习之路11--Qt标准对话框(颜色对话框和输入对话框)_第1张图片
弹出对话框直接点击OK后的输出结果是:
Qt学习之路11--Qt标准对话框(颜色对话框和输入对话框)_第2张图片
输出结果和在对话框上的数据是一致的。

注意:在设置默认颜色时候我们传递的实参并不是一个const引用,而是传递的常数值或者使用了临时变量,为什么正确?

  • const引用在传实参时,若实参类型正确但是它不是左值时就会生成临时对象;若实参的类型不正确,但是可以转换成正确的类型时也会生成临时对象。
  • C++允许常量引用,对于这种行为(建立临时变量),是因为该函数的目的是使用传递的值,而不是修改它们,因此创建临时变量不会造成任何不利的影响,反而会使函数在可处理的参数种类方面更通用。
  • 实际上,对于形参为const引用的C++函数,如果实参不匹配,其类似于按值传递,为确保原始数据不改变,使用临时变量来存储值。

实用函数getColor

使用静态成员函数getColor,其函数原型:

QColor QColorDialog::getColor ( const QColor & initial, QWidget * parent, const QString & title, ColorDialogOptions options = 0 )
QColor QColorDialog::getColor ( const QColor & initial = Qt::white, QWidget * parent = 0 )
QColor color = QColorDialog::getColor(Qt::red, this, "Color Editor");

qDebug() << color;
qDebug() << color.red();
qDebug() << color.green();
qDebug() << color.blue();
qDebug() << color.hue();
qDebug() << color.saturation();
qDebug() << color.value();

得到的结果和使用三板斧构建的颜色对话框一样。

输入对话框

Qt提供了预定义的输入对话框QInputDialog类,它用于需要临时输入数据的场合。
三板斧使用方式:

QInputDialog dia(this);
dia.setWindowTitle("Input Dialog");
dia.setLabelText("Please input text:");
dia.setInputMode(QInputDialog::TextInput);//可选参数:DoubleInput  TextInput

if(dia.exec() == QInputDialog::Accepted)
{
   qDebug() << dia.textValue();
}

需要注意的是在setInputMode函数中可选参数包括文本类型、浮点数类型和整型
Qt学习之路11--Qt标准对话框(颜色对话框和输入对话框)_第3张图片
在点击OK后程序就可以通过textvalue函数(对于输入的不同类型的数据使用的函数不同,有intvalue和doublevalue)拿到输入框中的数据内容。

几个实用的静态函数

几个函数的前三个参数的意义都是一样的,为父组件对象,标题和提示内容。

getDouble

double  getDouble ( QWidget * parent, const QString & title, const QString & label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool * ok = 0, Qt::WindowFlags flags = 0 )
  • value:默认值
  • min:最小值
  • max:最大值
  • decimals:最多保留的小数位数
  • ok:按下OK写true,按下Cancel写false
bool ok = true;
qDebug() << QInputDialog::getDouble ( this, "Input Dialog","Please input number" , 0.000000, 0.00000, 255.00000, 6, &ok);

Qt学习之路11--Qt标准对话框(颜色对话框和输入对话框)_第4张图片

getInt

int getInt ( QWidget * parent, const QString & title, const QString & label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool * ok = 0, Qt::WindowFlags flags = 0 )

step:表示每次增加或减少的数值

//倒数第二个参数表示默认每次增加的值 step
qDebug() << QInputDialog::getInt (this, "Input Dialog", "Please enter num", 0, 0, 65535, 10, &ok );

Qt学习之路11--Qt标准对话框(颜色对话框和输入对话框)_第5张图片

getItem

QString getItem ( QWidget * parent, const QString & title, const QString & label, const QStringList & items, int current = 0, bool editable = true, bool * ok = 0, Qt::WindowFlags flags = 0 )
  • items:表示可选的条目
  • current:默认的条目在所有可选条目中的序号,即QStringList 中的第current个值
  • editable:是否可编辑
//函数功能:获取某些可选项中的其中一个
QStringList items;
items << tr("Spring") << tr("Summer") << tr("Fall") << tr("Winter");
qDebug() << QInputDialog::getItem(this, "QInputDialog::getItem()", "Season:", items, 0, false, &ok);

Qt学习之路11--Qt标准对话框(颜色对话框和输入对话框)_第6张图片

getText

QString getText ( QWidget * parent, const QString & title, const QString & label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString & text = QString(), bool * ok = 0, Qt::WindowFlags flags = 0 )
  • mode:回显模式
    • QLineEdit::Normal :正常显示
    • QLineEdit::NoEcho :不显示
    • QLineEdit::Password :密码显示方式(星号代替)
    • QLineEdit::PasswordEchoOnEdit :在编辑时正常显示,编辑完成后显示星号
  • text:默认显示的内容
qDebug() << QInputDialog::getText(this,"QInputDialog::getText()","User name:", QLineEdit::Normal,QDir::home().dirName(), &ok);

Qt学习之路11--Qt标准对话框(颜色对话框和输入对话框)_第7张图片

小结

  • QColorDialog类用于提供指定颜色的对话框部件
  • QColor类用来在程序中表示颜色
  • QInputDialog类用于用户需要临时输入数据的场合

你可能感兴趣的:(Qt)