Conversation
|
|
||
| m_timer = new QTimer(this); | ||
| connect(m_timer, &QTimer::timeout, this, [this]() { | ||
| this->m_timer->setInterval(QRandomGenerator::global()->bounded(100, 1000)); |
There was a problem hiding this comment.
this писать не нужно, если переменные не экранированы. В данном случае это лишнее. Захват this в лямбду позволяет опускать this->, как будто мы находимся внутри метода.
There was a problem hiding this comment.
В прошлой домашке так и писал, а тут что-то подзабыл :)
There was a problem hiding this comment.
Кстати. Как говорит мой коллега: "Не надо делать это членом." m_timer в принципе можно не хранить полем окна, он же управляется из лямбд, куда он захвачен. Но я не против, это просто NIT.
|
|
||
| auto button = new QPushButton(this); | ||
| constexpr auto buttonSize = QSize(15, 15); | ||
| auto buttonPos = QPoint( |
There was a problem hiding this comment.
const облегчит чтение. Мы будем понимать, что ниже это значение уже не будет меняться.
There was a problem hiding this comment.
То есть надо все переменные по возможности обмазывать const'ами, даже если значение используется уже на следующей строчке?
There was a problem hiding this comment.
По хорошему да. Я обычно говорю что надо const писать везде, где можно написать const. Кроме тех мест, где const написать нельзя.
Потому что const -- это ещё один предохранитель на вашем оружии. У вас и у ваших коллег будет меньше шансов отстрелить себе конечность. Кто-то говорит "зачем это надо, тут же всё очевидно", а потом может быть случайная модификация, которую сложно найти визуально.
| button->deleteLater();}); | ||
|
|
||
| buttonTimer->start(QRandomGenerator::global()->bounded(15, 30)); }); | ||
| m_timer->start(1000); |
There was a problem hiding this comment.
Нарушение требования ТЗ. Период появления кнопок тоже произвольный.
There was a problem hiding this comment.
Поправить, конечно, не сложно, но не совсем согласен, что это нарушение ТЗ. В ТЗ сказано:
Интервал времени между появлением объектов случайный от 0.1 до 1 секунды
А здесь задается время между запуском программы и появлением первого объекта, которое в ТЗ не задано.
There was a problem hiding this comment.
Извиняюсь, я проглядел у вас строчку на этот предмет...
m_timer->setInterval(QRandomGenerator::global()->bounded(minCreationTimeMs, maxCreationTimeMs));
Поэтому всё было корректно сразу.
Toxin65
left a comment
There was a problem hiding this comment.
Выявлены несоответствия требованиям ТЗ.
|
|
||
| m_timer = new QTimer(this); | ||
| constexpr auto minCreationTimeMs = 100, maxCreationTimeMs = 1000; | ||
| connect(m_timer, &QTimer::timeout, this, [this, minCreationTimeMs, maxCreationTimeMs]() { |
There was a problem hiding this comment.
Уверено, что minCreationTimeMs и maxCreationTimeMs не надо захватывать в лямбду. Попробуйте. И подумайте, почему так.
There was a problem hiding this comment.
Да, не знал о такой особенности. Спасибо!
| QRandomGenerator::global()->bounded(0, 100 - buttonSize.height()) | ||
| ); | ||
| button->setGeometry(QRect(buttonPos, buttonSize)); | ||
| button->setText("*"); |
There was a problem hiding this comment.
Это можно сделать в конструкторе кнопки.
There was a problem hiding this comment.
Хм, действительно, но что-то я логики в Qt не уловил. В конструкторе QPushButton можно задать текст, но свойства text у объекта класса QPushButton нет, это свойство его базового класса QAbstractButton. Зато у класса QAbstractButton есть свойство text, но задать его в конструкторе почему-то нельзя. Чудеса!
There was a problem hiding this comment.
Не, нормально. Почему нет?
There was a problem hiding this comment.
Ладно, видимо сделали так, как удобно программистам. Постараюсь внимательнее разглядывать конструкторы в следующий раз, а то привык только parent писать, а там, оказывается, еще что-то бывает. Спасибо!
| }); | ||
|
|
||
| connect(button, &QPushButton::pressed, button, [button](){ | ||
| button->deleteLater();}); |
There was a problem hiding this comment.
Тут лямбда не нужна. Можно обращаться как в слот.
No description provided.