在setModelD中显示QMessageBox时出错

2024-04-25 11:52:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过显示QMessageBox来提醒用户输入无效数据。问题是它给了我这个错误:TypeError:参数与任何重载调用都不匹配。我写的代码是:

def setModelData(self, editor, model, index):
    if index.column() == 1:
        data = editor.text()
        query = QSqlQuery()
        query.exec_("select * from gaceta where nombre='%s'" % (data,))
        if query.next():
            QMessageBox.warning(self, 'Error', 'Ya hay una Gaceta con ese nombre')
        else:
            model.setData(index, QVariant(data))    

我在数据库中查找同名的元素,如果找到任何元素,我不会设置数据,而是通知用户验证错误。如果有更好的方法,请告诉我


Tags: 数据用户self元素data参数indexmodel
1条回答
网友
1楼 · 发布于 2024-04-25 11:52:25

看起来您是在QItemDelegate的子类中调用它的。QItemDelegate子类QAbstractItemDelegate又是子类QObject。你知道吗

QMessageBox.warning的第一个参数必须是QWidget的导数,正如我上面的解释所示,QItemDelegate不是。因此,您将得到一个错误,即传递给QMessageBox.warning的参数的类型错误。你知道吗

因此,您需要一个实际的QWidget,而不是传递self。您可以尝试使用editor变量,因为它包含QWidget派生(您的文本框)。我不明白为什么那样不行。但是,如果您在使用该解决方案时遇到了问题,您可能需要将另一个小部件的引用传递到QItemDelegate构造函数中,以便以后存储和引用。你知道吗

相关问题 更多 >