在上一篇里面,学习了两种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();
}
当运行程序后会弹出一个颜色选择对话框:
弹出对话框直接点击OK后的输出结果是:
输出结果和在对话框上的数据是一致的。
使用静态成员函数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函数中可选参数包括文本类型、浮点数类型和整型
在点击OK后程序就可以通过textvalue函数(对于输入的不同类型的数据使用的函数不同,有intvalue和doublevalue)拿到输入框中的数据内容。
几个函数的前三个参数的意义都是一样的,为父组件对象,标题和提示内容。
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 )
bool ok = true;
qDebug() << QInputDialog::getDouble ( this, "Input Dialog","Please input number" , 0.000000, 0.00000, 255.00000, 6, &ok);
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 );
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 )
//函数功能:获取某些可选项中的其中一个
QStringList items;
items << tr("Spring") << tr("Summer") << tr("Fall") << tr("Winter");
qDebug() << QInputDialog::getItem(this, "QInputDialog::getItem()", "Season:", items, 0, false, &ok);
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 )
qDebug() << QInputDialog::getText(this,"QInputDialog::getText()","User name:", QLineEdit::Normal,QDir::home().dirName(), &ok);