QT6 源,七章对话框与多窗体(10) 输入对话框 QInputDialog 篇二:本类的源代码带注释

(9)本源代码定义于头文件 qinputdialog . h

#ifndef QINPUTDIALOG_H
#define QINPUTDIALOG_H

#include <QtWidgets/qtwidgetsglobal.h>
#include <QtCore/qstring.h>
#include <QtWidgets/qlineedit.h>

#include <QtWidgets/qdialog.h>

QT_REQUIRE_CONFIG(inputdialog);

QT_BEGIN_NAMESPACE

class QInputDialogPrivate;

/*
The QInputDialog class provides a simple convenience dialog to get a
    single value from the user.

Detailed Description :
输入值可以是字符串、数字或列表中的项目。必须设置标签以告知用户应输入的内容。
提供了五个静态便捷函数:getText()、getMultiLineText()、getInt()、
    getDouble()和getItem()。所有函数的使用方式类似,例如:
     bool ok;
     QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"),
        tr("User name:"), QLineEdit::Normal, QDir::home().dirName(), &ok);

     if (ok && !text.isEmpty())
         textLabel->setText(text);

如果用户点击确定,则ok变量设置为true;否则,设置为false。

标准对话框示例展示了如何使用QInputDialog以及其他内置的Qt对话框。

*/

class Q_WIDGETS_EXPORT QInputDialog : public QDialog
{
    Q_OBJECT

    Q_DECLARE_PRIVATE(QInputDialog)

    //enum InputMode { TextInput, IntInput, DoubleInput };
    //此属性保存用于输入的模式。此属性有助于确定用于在对话框中输入内容的控件。
    QDOC_PROPERTY(InputMode  inputMode  READ  inputMode  WRITE  setInputMode)

    //此属性持有标签的文本,该文本描述了需要输入的内容。
    QDOC_PROPERTY(QString            labelText
                    READ             labelText   WRITE    setLabelText)

    //此属性包含用于在对话框中接受输入的按钮文本.
    QDOC_PROPERTY(QString         okButtonText
                    READ          okButtonText   WRITE    setOkButtonText)

    QDOC_PROPERTY(QString     cancelButtonText
                    READ      cancelButtonText   WRITE    setCancelButtonText)
    //此属性包含用于取消对话框的按钮文本。

    //enum InputDialogOption { NoButtons, UseListViewForComboBoxItems,
    //                                    UsePlainTextEditForTextInput  };
    //此属性持有影响对话框外观和感觉的各种选项。
    QDOC_PROPERTY(InputDialogOptions      options    //默认情况下,所有选项都已禁用。
                    READ                  options    WRITE    setOptions)

    //此属性保存输入对话框中的文本值。 此属性仅在输入对话框以文本模式使用时才相关。
    QDOC_PROPERTY(QString               textValue
                    READ                textValue    WRITE setTextValue
                    NOTIFY              textValueChanged)

    //enum QLineEdit::EchoMode { Normal, NoEcho, Password, PasswordEchoOnEdit };
    //此属性用于设置文本值的回声模式。此属性仅在输入对话框以文本输入模式 TextInput使用时才相关。
    QDOC_PROPERTY(QLineEdit::EchoMode   textEchoMode
                    READ                textEchoMode
                    WRITE            setTextEchoMode)

    //此属性用于在输入对话框的组合框中显示项目。
    QDOC_PROPERTY(QStringList           comboBoxItems
                    READ                comboBoxItems   WRITE   setComboBoxItems)

    //此属性表示输入对话框中使用的组合框是否可编辑。
    QDOC_PROPERTY(bool                  comboBoxEditable
                    READ              isComboBoxEditable
                    WRITE            setComboBoxEditable)


    //此属性保存当前接受的整数值。此属性仅在IntInput模式下使用输入对话框时才相关。
    QDOC_PROPERTY(int         intValue
                    READ      intValue   WRITE setIntValue    NOTIFY intValueChanged)

    //此属性持有作为输入接受的最小整数值
    QDOC_PROPERTY(int         intMinimum
                    READ      intMinimum WRITE setIntMinimum)

    //This property holds the maximum integer value accepted as input.
    QDOC_PROPERTY(int         intMaximum
                    READ      intMaximum WRITE setIntMaximum)

    //此属性持有用于增加和减少整数值的步长.
    QDOC_PROPERTY(int         intStep
                    READ      intStep    WRITE setIntStep)

    //此属性保存当前接受的双精度浮点值。此属性仅在输入对话框用于双输入模式时才相关。
    QDOC_PROPERTY(int      doubleValue
                    READ   doubleValue    WRITE setDoubleValue
                    NOTIFY doubleValueChanged)

    QDOC_PROPERTY(double   doubleMinimum  //此属性持有接受的最小双精度浮点值。
                    READ   doubleMinimum  WRITE setDoubleMinimum)

    QDOC_PROPERTY(double   doubleMaximum  //此属性持有接受的输入的最大双精度浮点值
                    READ   doubleMaximum  WRITE setDoubleMaximum)

    //sets the precision of the double spinbox in decimals 以十进制形式,设置浮点数的小数位数
    QDOC_PROPERTY(int      doubleDecimals //设置双精度spinbox的精度为小数位
                    READ   doubleDecimals WRITE setDoubleDecimals)

    QDOC_PROPERTY(double   doubleStep     //此属性用于设置浮点数增加和减少的步长。
                    READ   doubleStep     WRITE setDoubleStep)

private:
    Q_DISABLE_COPY(QInputDialog)
    Q_PRIVATE_SLOT(d_func(), void _q_textChanged(const QString&))
    Q_PRIVATE_SLOT(d_func(), void _q_plainTextEditTextChanged())
    Q_PRIVATE_SLOT(d_func(), void _q_currentRowChanged( const QModelIndex &,
                                                        const QModelIndex &) )

public:

    //Constructs a new input dialog with the given parent and window flags.
    QInputDialog(   QWidget          * parent = nullptr,
                    Qt::WindowFlags    flags  = Qt::WindowFlags()   );

    ~QInputDialog();


    enum InputMode {
        TextInput  ,
        IntInput   ,
        DoubleInput
    };
//    QDOC_PROPERTY(InputMode              inputMode     //此属性保存用于输入的模式。
//                  READ                   inputMode
//                  WRITE               setInputMode)
                    InputMode              inputMode() const;
                    void                setInputMode(InputMode  mode);


//    QDOC_PROPERTY(QString                 labelText    //此属性持有标签的文本
//                  READ                    labelText
//                  WRITE                setLabelText)
                    QString                 labelText   () const;
                    void                 setLabelText   (const QString & text);


//    QDOC_PROPERTY(QString              okButtonText    //ok按钮上的文本.
//                  READ                 okButtonText
//                  WRITE             setOkButtonText)
                    QString              okButtonText() const;
                    void              setOkButtonText(const QString & text);


//    QDOC_PROPERTY(QString          cancelButtonText    //cancel按钮上的文本
//                  READ             cancelButtonText
//                  WRITE         setCancelButtonText)
                    QString          cancelButtonText() const;
                    void          setCancelButtonText(const QString & text);


    //此枚举定义了影响输入对话框外观和感觉的各种选项。
    enum InputDialogOption {
        NoButtons                    = 0x00000001, //不显示确定和取消按钮(对于“实时对话”有用)。
        UseListViewForComboBoxItems  = 0x00000002,
        //使用QListView而不是不可编辑的QComboBox来显示通过setComboBoxltems()设置的项目。
        UsePlainTextEditForTextInput = 0x00000004
        //使用QPlainTextEdit进行多行文本输入。此值在5.2版本中引入。
    };
    Q_DECLARE_FLAGS(InputDialogOptions, InputDialogOption)
//    QDOC_PROPERTY(InputDialogOptions    options     //默认情况下,所有选项都已禁用。
//                  READ                  options     WRITE    setOptions)
                    InputDialogOptions    options() const;
                    void               setOptions(InputDialogOptions options);
    void  setOption(InputDialogOption     option, bool on = true);
    bool testOption(InputDialogOption     option) const;


//    QDOC_PROPERTY(QString                textValue  //文本模式下的输入值
//                  READ                   textValue
//                  WRITE               setTextValue
//                  NOTIFY                 textValueChanged)
                    QString                textValue       () const;
                    void                setTextValue       (const QString & text);
Q_SIGNALS:
                    void                   textValueChanged(const QString & text);


public :
// //enum QLineEdit::EchoMode { Normal, NoEcho, Password, PasswordEchoOnEdit };
//    QDOC_PROPERTY(QLineEdit::EchoMode    textEchoMode      //文本模式时的回声模式。
//                  READ                   textEchoMode
//                  WRITE               setTextEchoMode)
                    QLineEdit::EchoMode    textEchoMode() const;
                    void                setTextEchoMode(QLineEdit::EchoMode mode);


//    QDOC_PROPERTY(QStringList             comboBoxItems    //组合框中显示项目
//                  READ                    comboBoxItems
//                  WRITE                setComboBoxItems )
                    QStringList             comboBoxItems() const;
                    void                 setComboBoxItems(const QStringList & items);


//    QDOC_PROPERTY(bool                    comboBoxEditable //组合框是否可编辑
//                  READ                  isComboBoxEditable
//                  WRITE                setComboBoxEditable)
                    bool                  isComboBoxEditable() const;
                    void                 setComboBoxEditable(bool editable);


//    QDOC_PROPERTY(int                     intValue         //整数模式下的接收值
//                  READ                    intValue
//                  WRITE                setIntValue
//                  NOTIFY                  intValueChanged)
                    int                     intValue       () const;
                    void                 setIntValue       (int value);
Q_SIGNALS:
                    void                    intValueChanged(int value);


public :
//    QDOC_PROPERTY(int        intMinimum    //此属性持有作为输入接受的最小整数值
//                  READ       intMinimum    WRITE    setIntMinimum)
                    int        intMinimum() const;
                    void    setIntMinimum(int min);

                    void    setIntRange  (int min, int max);

//    QDOC_PROPERTY(int        intMaximum    //整数模式下允许的最大值
//                  READ       intMaximum    WRITE    setIntMaximum)
                    int        intMaximum() const;
                    void    setIntMaximum(int max);


//    QDOC_PROPERTY(int        intStep       //整数模式下的步长.
//                  READ       intStep       WRITE    setIntStep)
                    int        intStep() const;
                    void    setIntStep(int step);


//    QDOC_PROPERTY(int        doubleValue   //浮点模式下的接收值
//                  READ       doubleValue   WRITE    setDoubleValue
//                  NOTIFY     doubleValueChanged)
                    double     doubleValue       () const;
                    void    setDoubleValue       (double value);
Q_SIGNALS:
                    void       doubleValueChanged(double value);


public :
//    QDOC_PROPERTY(double     doubleMinimum  //此属性持有接受的最小双精度浮点值。
//                  READ       doubleMinimum  WRITE   setDoubleMinimum)
                    double     doubleMinimum() const;
                    void    setDoubleMinimum(double min);

                    void    setDoubleRange  (double min, double max);

//    QDOC_PROPERTY(double     doubleMaximum  //此属性持有接受的输入的最大双精度浮点值
//                  READ       doubleMaximum  WRITE   setDoubleMaximum)
                    double     doubleMaximum()  const;
                    void    setDoubleMaximum(double max);


//    QDOC_PROPERTY(int        doubleDecimals //设置双精度spinbox的精度为小数位
//                  READ       doubleDecimals WRITE setDoubleDecimals)
                    int        doubleDecimals() const;
                    void    setDoubleDecimals(int decimals);


//    QDOC_PROPERTY(double     doubleStep     //此属性用于设置浮点数增加和减少的步长。
//                  READ       doubleStep     WRITE setDoubleStep)
                    double     doubleStep()     const;
                    void    setDoubleStep(double step);

    QSize         sizeHint()  const override;
    QSize  minimumSizeHint()  const override;
    void   setVisible(bool visible) override;

    //virtual void  QDialog::done(int r); //形参是枚举量 Rejected, Accepted 之一。
    //本槽函数会触发信号函数 accepted() 或 rejected()之一, 并与finished( r )的执行。
    void   done(int result)         override;
    //关闭对话框并将结果代码设置为 result。如果此对话框是通过 exec()函数显示的,
    //那么 done会促使本地事件循环结束,而exec()会返回 result。

Q_SIGNALS:
    //每当对话框中的整数值发生变化时,都会发出此信号。当前值由value指定。
    //此信号仅在输入对话框以IntInput模式使用时才相关。
    //void     intValueChanged(      int        value); //这是成员函数

    //每当对话框中的文本字符串发生变化时,都会发出此信号。当前字符串由text指定。
    //void    textValueChanged(const QString &  text );

    //每当对话框中的双值发生变化时,都会发出此信号。当前值由value指定。
    //void  doubleValueChanged(      double     value);

    //每当用户通过接受对话框来选择整数值时,都会发出这个信号;
    //例如,通过点击“确定”按钮。所选的值由“value”属性指定。
    void      intValueSelected(      int        value);

    //每当用户通过接受对话框选择文本字符串时(例如,通过点击“确定”按钮),便会发出此信号。
    void     textValueSelected(const QString &  text );

    //This signal is emitted whenever the user selects a
    //  double value by accepting the dialog; for example, by clicking the OK button.
    //The selected value is specified by value.
    void   doubleValueSelected(      double     value);

public :
    using QDialog::open; //将对话框显示为窗口模态 window modal dialog对话框,并立即返回。
    //virtual void QDialog::open();
    void open(QObject * receiver, const char * member); // This function connects
    //  one of its signals to the slot specified by receiver and member.
    //使用的信号函数取决于 member 槽函数中的第一个参数的类型:
    //    intValueSelected()如果成员的第一个参数是一个整数。
    //   textValueSelected()如果成员的第一个参数是一个QString。
    // doubleValueSelected()如果成员的第一个参数是一个双精度浮点数。
    //   如果成员没有参数,则使用 accepted()。  // 这是 QDialog里的信号函数之一
    // 当对话框关闭时,信号将从插槽断开连接。        void QDialog::accepted();

public :  //开始本类最重要的静态成员函数的学习

    /*
    静态便捷函数,用于从用户处获取整数输入。
    标题 title是显示在对话框标题栏中的文本。标签 label是显示给用户的内容(说明应输入的内容)。
    值 value是Spinbox将设定的默认整数值。minValue和maxValue是用户可以选择的最小和最大值。
    步长 step是当用户按下箭头按钮以增加或减少值时,值变化的幅度。
    If ok is nonnull,那么当用户按下“确定”时,*ok 将被设置为真,而按下“取消”时 *ok 将被设置为假。
    对话框的父对象为`parent`。该对话框将是模态的,并会使用相应的Widget flags。
    成功时,此函数返回用户输入的整数;失败时,它返回初始值。
    像这样使用这个静态函数:
        bool ok;
        int i = QInputDialog::getInt(this, tr("QInputDialog::getInt()"),
                                    tr("Percentage:"), 25, 0, 100, 1, &ok);
        if (ok)
            integerLabel->setText(tr("%1%").arg(i));
    */
    static int getInt(QWidget * parent, const QString & title, const QString & label,
        int    value = 0, int    minValue = -2147483647, int    maxValue = 2147483647,
        int    step  = 1, bool * ok       = nullptr,
        Qt::WindowFlags flags = Qt::WindowFlags()  );

    static double getDouble(QWidget * parent, const QString & title, const QString & label,
        double value = 0, double minValue = -2147483647, double maxValue = 2147483647,
        int decimals = 1, bool * ok       = nullptr,
        Qt::WindowFlags flags = Qt::WindowFlags(),
        double step = 1);
    /*
    静态方便函数,用于从用户处获取浮点数。
    标题 title是显示在对话框标题栏中的文本。标签 label是展示给用户的文本(应说明应输入的内容)。
    值 value是默认的浮点数,该浮点数将被设置为“行编辑”框 line edit 的值。
    最小值 minValue和最大值 maxValue是用户可以选择的最小和最大值。
    小数位数 decimals是数字可能包含的最大小数位数。
    步长 step是用户在按下箭头按钮以增加或减少值时,值发生变动的幅度。
    If ok is nonnull,那么当用户按下“确定”时,*ok 将被设置为真,而按下“取消”时 *ok 将被设置为假。
    对话框的父对象为 parent。该对话框将是模态的,并会使用相关小部件标志。
    此函数返回用户输入的浮点数。
    像这样使用这个静态函数:
        bool ok;
        double d = QInputDialog::getDouble(this, tr("QInputDialog::getDouble()"),
                tr("Amount:"), 37.56, -10000, 10000, 2, &ok, Qt::WindowFlags(), 1);

        if (ok)
            doubleLabel->setText(QString("$%1").arg(d));
    */


    /*
    静态方便函数,用于从用户处获取字符串。
    标题 title是显示在对话框标题栏中的文本。标签 label是显示给用户(应说明应输入的内容)的文本。
    文本 text是放置在行编辑框中的默认文本。模式 echo是行编辑框将使用的回显模式。
    输入方法提示 inputMethodHints是在有输入方法激活时,编辑控件将使用的输入方法提示。
    If ok is nonnull,那么当用户按下“确定”时,*ok 将被设置为真,而按下“取消”时 *ok 将被设置为假。
    对话框的父对象为`parent`。该对话框将是模态的,并会使用指定的小部件标志。
    如果对话框被接受,此函数返回对话框的行编辑器中的文本。如果对话框被拒绝,则返回空字符串。
    像这样使用这个静态函数:
        bool ok;
        QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"),
            tr("User name:"), QLineEdit::Normal, QDir::home().dirName(), &ok);

        if (ok && !text.isEmpty())
            textLabel->setText(text);
    */

    static QString getText (QWidget * parent, const QString & title, const QString & label,
                QLineEdit::EchoMode    echo             = QLineEdit::Normal,
        const   QString              & text             = QString(), bool * ok = nullptr,
                Qt::WindowFlags        flags            = Qt::WindowFlags(),
                Qt::InputMethodHints   inputMethodHints = Qt::ImhNone  );

    static QString getMultiLineText(   //对比一下单行文本,只是取消了密码形式,注释略。
                QWidget * parent, const QString & title, const QString & label,
        const   QString              & text             = QString(), bool * ok = nullptr,
                Qt::WindowFlags        flags            = Qt::WindowFlags(),
                Qt::InputMethodHints   inputMethodHints = Qt::ImhNone        );

    /*
    参数项 items是插入到组合框中的字符串列表。当前项 current是应作为当前项的项号。
    输入法提示 inputMethodHints是在组合框可编辑且存在正在使用的输入法时使用的输入法提示。
    如果 editable为true,用户可以输入自己的文本;否则,用户只能选择一个现有项目。
    */
    static 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::WindowFlags(),
                Qt::InputMethodHints    inputMethodHints = Qt::ImhNone  );

}; //完结 class QInputDialog : public QDialog

Q_DECLARE_OPERATORS_FOR_FLAGS(QInputDialog::InputDialogOptions)

QT_END_NAMESPACE

#endif // QINPUTDIALOG_H

(10)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值