当前位置 博文首页 > liuguangshibei的博客:QT学习——day8

    liuguangshibei的博客:QT学习——day8

    作者:[db:作者] 时间:2021-08-13 12:54

    QT学习——day8

    QInputDialog(输入对话框)

    主要实现一个用户数据输入的接口。

    提供多种静态成员函数以实现多种方法。(引用自QT官方帮助文档)

    返回值:double 
    getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = ...)
    返回值:double 
    getDouble(QWidget *parent, const QString &title, const QString &label, double value, double min, double max, int decimals, bool *ok, Qt::WindowFlags flags, double step)
    返回值:int 
    getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = ...)
    返回值:QString 
    getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = ..., Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
    返回值:QString 
    getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = ..., Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
    返回值:QString 
    getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = ..., Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
    

    实例化操作:

    1.int类型的输入框:

    int ret=QInputDialog::getInt(this,"年龄","你过年多大啦:",20,10,110,2);
        QMessageBox::about(this,"年龄","我过年"+QString::number(ret)+"岁啦!!!");//QString::number一个强制类型转化
    

    2.double类型的输入框:

     double ret=QInputDialog::getDouble(this,"年龄","你过年多大啦:",20,10,110,2);//最后一个参数与int的不同,为double型数据小数点后保留几位,如上为两位。其余与int类型均相同。
    

    3.item类型的输入框(下拉框类型):

     QStringList items;
        items<<"C++"<<"C#"<<"PHP"<<"JAVA"<<"GoLong"<<"Python"<<"CSS";
        QString str=QInputDialog::getItem(this,"请选择你最喜欢的编程语言:","我最喜欢的语言是:",items,1,false);//最后一个参数为false则下拉框中的值不能被修改,为true则可以被修改。
        QMessageBox::about(this,"年龄","我最喜欢的语言是:"+str);
    
    

    QStringList items;->继承与QList类,与C++中STL中的list类类似。

    4.文本读取类(可用作密码输入):

     QString pwd=QInputDialog::getText(this,"登录","请输入密码!",QLineEdit::Password,"15801");//倒数第二个参数为枚举值。
        QMessageBox::about(this,"登录","密码为:"+pwd);
    

    枚举值分布(引用自官方文档):

    Constant:QLineEdit::Normal
    Value:0
    Description:Display characters as they are entered. This is the default.
    QLineEdit::NoEcho
    1
    Do not display anything. This may be appropriate for passwords where even the length of the password should be kept secret.
    QLineEdit::Password
    2
    Display platform-dependent password mask characters instead of the characters actually entered.
    QLineEdit::PasswordEchoOnEdit
    3
    Display characters as they are entered while editing otherwise display characters as with Password.
    

    5.多行文本读取类:

    可进行多行数据的写入。

     QString m_t=QInputDialog::getMultiLineText(this,"","","afda");
           QMessageBox::about(this,"",m_t);
    

    QProgressDIalog(进度条对话框)

    用于程序在执行期间向用户表达直观的反馈。

    创建进度条对话框窗口对象时调用的构造函数。

    调用该函数可以通过构造函数初始化窗口的提示、按钮值、进度框的最大最小值,父窗口等属性。

    QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = ...)
    

    第二个构造函数,调用该函数只能指定父窗口。

    QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = ...)
    

    故需调用如下的各种set函数来进行初始化。

    void 
    setCancelButton(QPushButton *cancelButton)
    void 
    setLabel(QLabel *label)
    
    void 
    setMaximum(int maximum)
    void 
    setMinimum(int minimum)
    
    

    实例化演示:

    暂时用Timer类代替程序的执行来实现进度条的演示。

    1.创建窗口并初始化。

    2.显示窗口。

    3.更新进度条。

    QProgressDialog *pro=new QProgressDialog("拷贝中。。。","取消拷贝",0,100,this);
       pro->show();//显示窗口
       QTimer *timer=new QTimer(this);
       timer->start(100);//每100ms发一次信号
       static int value=0;
       connect(timer,&QTimer::timeout,this,[=](){
           pro->setValue(value);
           value++;
           if(value>pro->maximum())
           {
               timer->stop();//满足条件后停止发射信号
               value=0;
           }//connect函数的第一第三个参数必须为对象指针,否则报错
           connect(pro,&QProgressDialog::canceled,this,[=](){
               timer->stop();
               value=0;
           });
       });
    

    // 设置窗口的显示状态(模态, 非模态)
    /*
    参数:
    Qt::NonModal -> 非模态
    Qt::WindowModal -> 模态, 阻塞父窗口
    Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口。

    可以根据以上成员函数将进度条窗口设置为模态显示。

    cs
    下一篇:没有了