2014-10-24 4 views
-1

Я пытаюсь предупредить пользователя при вводе неверных данных, показывая QMessageBox. Проблема в том, что он дал мне эту ошибку: TypeError: аргументы не соответствовали перегруженному вызову. Код я написал это:Ошибка при показе QMessageBox в setModelData

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

Я смотрю на элемент с тем же именем в базе данных, и если я найду какой-либо я не установить данные и вместо того, чтобы сообщить пользователю об ошибке проверки. Если есть лучший способ сделать это, пожалуйста, скажите, thnks

ответ

1

Похоже, вы вызываете это из подкласса QItemDelegate. QItemDelegate подклассы QAbstractItemDelegate, которые в свою очередь подклассы QObject.

Первый аргумент QMessageBox.warning должен быть производным от QWidget, который, как вы можете видеть из приведенного выше объяснения, QItemDelegate - нет. Таким образом, вы получаете ошибку, что аргументы, которые вы передали QMessageBox.warning, были неправильного типа.

Таким образом, вместо того, чтобы проходить self, вам необходимо указать QWidget. Вы можете попробовать использовать переменную editor, так как она содержит производное QWidget (ваше текстовое поле). Я не понимаю, почему это не сработает. Однако, если у вас возникнут проблемы с этим решением, вам может потребоваться вместо этого передать ссылку для другого виджета в ваш конструктор QItemDelegate, который вы можете сохранить и ссылаться позже.

+0

Я изменил себя для редактора, и все сработало, как ожидалось. Знал, что первым аргументом 'QMessageBox' должен быть' QWidget'. Thnks – user3213906

Смежные вопросы