qt c++如何设置qinputdialog在无内容输入的时候按钮无法点击,有内容的时候按钮可以点击
时间: 2023-06-11 17:05:26 浏览: 135
你可以通过使用validator()函数来实现这个需求。首先,创建一个自定义的QValidator类,重写validate()函数以检查输入内容是否为空。然后,将这个自定义的Validator设置给QInputDialog中的QLineEdit控件,在QInputDialog中设置好Validator后,可以在QInputDialog中获取到QLineEdit控件,通过QLineEdit的textChanged()信号来控制按钮的可用状态。
代码示例如下:
```cpp
#include <QApplication>
#include <QInputDialog>
#include <QLineEdit>
#include <QValidator>
#include <QPushButton>
// 自定义QValidator类
class MyValidator : public QValidator
{
public:
QValidator::State validate(QString& input, int& pos) const override
{
if (input.isEmpty())
{
return QValidator::Invalid;
}
else
{
return QValidator::Acceptable;
}
}
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
// 创建QInputDialog
QInputDialog dialog(nullptr);
dialog.setLabelText("Enter some text:");
dialog.setInputMode(QInputDialog::TextInput);
// 设置Validator
QLineEdit* edit = dialog.findChild<QLineEdit*>();
if(edit)
{
edit->setValidator(new MyValidator());
// 控制按钮的可用状态
QPushButton* okButton = dialog.findChild<QPushButton*>("qt_inputdialog_ok_button");
if (okButton)
{
QObject::connect(edit, &QLineEdit::textChanged, [=]() {
okButton->setEnabled(edit->hasAcceptableInput());
});
okButton->setEnabled(false);
}
}
int ret = dialog.exec();
if (ret == QDialog::Accepted)
{
QString text = dialog.textValue();
qDebug() << "Text entered: " << text;
}
return a.exec();
}
```
当用户输入内容为空时,点选OK按钮无效,按钮变灰色;当用户输入内容后,点选OK按钮有效。
阅读全文