Tan*_*iet 4 c++ qt qtablewidgetitem
假设我有一个QTableWidgetItem项,我只是想验证用户输入的数据。例如,用户仅在该项目中输入数字,否则程序将显示警告对话框。
我也在该文档页面上搜索,但没有找到与setValidator()函数类似的函数。
如何为该QTableWidgetItem项目使用验证器?
谢谢!
假设您真正想要的是具有QValidate-able单元格,则可以QLineEdit改为使用实例填充该单元格。这是使用的示例QDoubleValidator,但是任何示例都可以使用QValidator:
QLineEdit *edit = new QLineEdit(ui->myTable);
edit->setValidator(new QDoubleValidator(edit));
ui->myTable->setCellWidget(row, col, edit);
Run Code Online (Sandbox Code Playgroud)
默认情况下,QLineEdit将填充单元格并绘制一个框架。为了保持表格的外观,您可以通过先验调用以下函数来关闭框架:
QLineEdit::setFrame(false);
Run Code Online (Sandbox Code Playgroud)
此解决方案的一件令人讨厌的事情是,您必须致电
QWidget* QTableWidget::cellWidget(row, col) const
Run Code Online (Sandbox Code Playgroud)
以随后访问每个单元格中的QLineEdit实例,这意味着您还必须将指针强制转换为QLineEdit*。(请参见qobject_cast())。这有点冗长但可行。
我可以想到两种不同的方法来处理这个问题。可能还有其他解决方案。
您可以子类化 QTableWidgetItem 并重新实现该setData函数。如果您选择了无效值,则可能会发出错误消息。
QWidget您可以子类化 QStyledItemDelegate 并通过重新实现将 QValidator 添加到编辑器createEditor或重新实现setModelData并检查其中的用户输入。再次,如果存在无效数据,您可以发出错误消息。
检查每个文件的文档,看看哪个更适合您的项目。