Bootstrap

QT QInputDialog弹出消息框用法

使用QInputDialog类的静态方法来弹出对话框获取用户输入,缺点是不能自定义按钮的文字,默认为OK和Cancel:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    bool isOK;
    QString text = QInputDialog::getText(NULL, "Input Dialog",
            "Please input your comment",QLineEdit::Normal,"your input chars",&isOK);

        if(isOK)
        {
               QMessageBox::information(NULL, "Information",
                        "Your input content is: <b>" + text + "</b>",
                            QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes);

                  qDebug() << "Hello, World!";
        }
        else
        {
                  qDebug() << "cancel!";
        }
        //  MainWindow w;
        //  w.show();
    return a.exec();
}

QString cancelButtonText() const:返回取消按钮的文本。
QStringList comboBoxItems() const:返回下拉框的所有选项。
int doubleDecimals() const:返回双精度浮点数的精度,即小数点后的位数。
double doubleMaximum() const:返回双精度浮点数的最大值。
double doubleMinimum() const:返回双精度浮点数的最小值。
double doubleValue() const:返回当前输入的双精度浮点数值。
InputMode inputMode() const:返回输入模式,可能为数值、日期、时间等。
int intMaximum() const:返回整数的最大值。
int intMinimum() const:返回整数的最小值。
int intStep() const:返回每次增加或减少的整数值。
int intValue() const:返回当前输入的整数值。
bool isComboBoxEditable() const:返回下拉框是否可编辑。
QString labelText() const:返回标签的文本。
QString okButtonText() const:返回确认按钮的文本。
void open(QObject *receiver, const char *member):打开输入对话框,并将指定的对象(receiver)和成员函数(member)连接起来,以响应对话框中的操作。
InputDialogOptions options() const:返回输入对话框的选项,如是否显示取消按钮/编辑等。
`void setCancelButtonText(const QString &text):设置取消按钮的文本。
void setComboBoxEditable(bool editable):设置下拉框是否可编辑。
void setComboBoxItems(const QStringList &items):设置下拉框的所有选项。
void setDoubleDecimals(int decimals):设置双精度浮点数的精度,即小数点后的位数。
void setDoubleMaximum(double max):设置双精度浮点数的最大值。
void setDoubleMinimum(double min):设置双精度浮点数的最小值。
void setDoubleRange(double min, double max):设置双精度浮点数的范围,包括最小值和最大值。
void setDoubleValue(double value):设置当前输入的双精度浮点数值。
void setInputMode(InputMode mode):设置输入模式,可能为数值、日期、时间等。
void setIntMaximum(int max):设置整数的最大值。
void setIntMinimum(int min):设置整数的最小值。
void setIntRange(int min, int max):设置整数的范围,包括最小值和最大值。
void setIntStep(int step):设置每次增加或减少的整数值。
void setIntValue(int value):设置当前输入的整数值。
void setLabelText(const QString &text):设置标签的文本。
void setOkButtonText(const QString &text):设置确认按钮的文本。
void setOption(InputDialogOption option, bool on = true):设置输入对话框的选项,如是否显示取消按钮、是否可编辑等。
void setOptions(InputDialogOptions options):设置输入对话框的所有选项,包括是否显示取消按钮、是否可编辑等。
void setTextEchoMode(QLineEdit::EchoMode mode):设置文本回显模式,用于文本框显示文本的方式。
void setTextValue(const QString &text):设置文本框的文本值。
bool testOption(InputDialogOption option) const:测试输入对话框的选项是否开启。
QLineEdit::EchoMode textEchoMode() const:返回文本框的文本回显模式。
QString textValue() const:返回文本框的文本值。

信号
1)doubleValueChanged
        inputMode为DoubleInput的时候,改变对话框内容都会触发此信号。

void doubleValueChanged(double value)
 2)doubleValueSelected
        inputMode为DoubleInput的时候,用户通过接受对话框选择文本触发该信号。

void doubleValueSelected(double value)
 3)intValueChanged
        inputMode为IntInput的时候,改变对话框内容都会触发此信号。

void intValueChanged(int value)
  4)intValueChanged
        inputMode为IntInput的时候,用户通过接受对话框选择文本触发该信号。

 void intValueSelected(int value)
5)textValueChanged
        inputMode为TextInput的时候,改变对话框内容都会触发此信号。

void textValueChanged(const QString &text)
 6)textValueChanged
        inputMode为TextInput的时候,用户通过接受对话框选择文本触发该信号。

void textValueSelected(const QString &text);

模拟用户主动点击OK或CANCEL

#include <QApplication>
#include <QInputDialog>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QInputDialog dialog;
    dialog.setInputMode(QInputDialog::IntInput);
    dialog.setIntRange(0, 99);
    dialog.setIntValue(10);
    dialog.setLabelText("Enter a number between 0 and 99:");

    QObject::connect(&dialog, &QInputDialog::intValueChanged, [&](int value)
    {
        qDebug() << "Value changed to" << value;
    });


    // 显示对话框
   // dialog.exec();

    // 模拟用户点击OK
    QObject::connect(&dialog, &QInputDialog::intValueSelected, [&](int value)
    {
        qDebug() << "Simulating OK button click with value" << value;
    });

    // 发射信号以模拟点击OK
    QMetaObject::invokeMethod(&dialog, "accept", Qt::QueuedConnection);

    return app.exec();
}

在Qt中,可以使用QInputDialog类来弹出一个输入对话框。要判断一个QInputDialog是否已经弹出,可以通过检查其是否有父窗口并且该父窗口是否可见来实现。

首先创建了一个QInputDialog对象,并设置了它不显示任何按钮和一个标签文本。然后,我们定义了一个布尔变量isVisible来判断对话框是否可见。通过调用dialog.isVisible()来检查对话框是否已经显示给用户。如果对话框可见,isVisible将被设置为true,否则为false

请注意,这种方法假设你没有手动地将对话框的可见性设置为其他值。如果你在显示对话框之前或者在其他地方修改了它的可见性,你需要相应地更新这个检查逻辑。

以下是一个简单的示例,展示如何判断一个QInputDialog是否已经弹出:

#include <QApplication>
#include <QInputDialog>
#include <QDebug>

int main(int argc, char *argv[]) 
{
    QApplication app(argc, argv);

    QInputDialog dialog;
    dialog.setOptions(QInputDialog::NoButtons); // 设置对话框没有按钮
    dialog.setLabelText("请输入一个数字:");
    bool isVisible = false;
    // 检查对话框是否可见
    if(dialog.isVisible()) 
    {
        isVisible = true;
    }

    qDebug() << "Input dialog is" << (isVisible ? "visible" : "not visible");
    return app.exec();
}

;