Должен ли я проверять наличие нулевых указателей после вызова метода Qt setui?

Я использую Qt Designer для создания множества разных файлов *.ui для своего приложения. Затем эти файлы используются в соответствии с одиночное наследование.

После вызова ui.setupUi(this); мне нужно проверить и посмотреть, являются ли какие-либо элементы графического интерфейса нулевыми? Я знаю, что setupUi создает экземпляры всех объектов в графическом интерфейсе, но возвращает void и, похоже, не использует исключения. Есть ли какая-то гарантия, которую мне не хватает в Qt, которая позволяет мне знать, что элементы пользовательского интерфейса безопасны для использования, или мне следует выполнять нулевую проверку каждый раз, когда я хочу их коснуться?

Пример можно увидеть в образце кода из документации здесь: https://doc.qt.io/qt-5/qtdesigner-calculatorform-example.html

Обратите внимание, что перед использованием указателей на элементы пользовательского интерфейса проверка нулевого значения не выполняется. Это можно было бы опустить для краткости примера, но я никогда не вижу этого в примере кода. Если я могу с уверенностью предположить, что элементы пользовательского интерфейса существуют, я могу удалить множество операторов if из своего кода...


person Aaron Fine    schedule 31.07.2019    source источник


Ответы (1)


После вызова ui.setupUi(this); мне нужно проверить и посмотреть, являются ли какие-либо элементы графического интерфейса нулевыми?

Нет. Вам не нужно этого делать.

setupUi() не проглатывает исключения. В нем вообще нет блоков try. (В Creator вы можете просто нажать F2, когда курсор находится на вызове setupUi(), чтобы перейти к этой функции и проверить ее.) Если new или один из конструкторов виджета выдает исключение, вы получите это исключение. Насколько я знаю, конструкторы QWidget не будут генерировать, но new могут (например, нехватка памяти).

Вам даже не нужно самостоятельно проверять исключения внутри собственного конструктора, вызывающего setupUi(). Если setupUi() выбрасывает исключение, то, в свою очередь, ваш собственный конструктор автоматически повторно выдает исключение.

Короче говоря, все это означает, что вам никогда не нужно проверять, является ли какой-либо из указателей виджета ui нулевым.

person Nikos C.    schedule 01.08.2019