(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)
谢谢