Всем привет)
Есть две кнопки на форме, QPushButton1 и QPushButton2. Мне надо нарисовать линию между кнопками. Т.е. нажали на кнопку QPushButton1 и нажатой навели на кнопку QPushButton2 и там отжали. И потом на форме должна рисоваться линия. Как это реализовать? Желательно после рисования линии QPushButton1 и QPushButton2 сбрасывались.
При отжатии QPushButton2 почему то реагирует только в своей области кнопки. Т.е. нажали на кнопку QPushBUtton2 и там же отжали, только так отжатие срабатывает.
1)Правильно ли делаю каждый раз update()?
2)Почему отжатие кнопки работает только в своей области?
Сам код
void Dialog::paintEvent(QPaintEvent *)
{
if (_isBeingMouse1 &&_isBeingMouse2 == true)
{
QPainter p(this); // Создаём новый объект рисовальщика
p.setPen(Qt::red);// Настройки рисования
p.setBrush(Qt::white);// Настройки рисования
// p.drawLine(10,10,100,100); // Рисование линии
// painter->drawLine(firstTextWidget.geometry().center(),secondTextWidget.geometry().center());
p.drawLine(ui->pushButton->geometry().center(),ui->pushButton_2->geometry().center());
}
else
{
//QPainter painter(this);
// qDebug()<< "text";
}
}
void Dialog::on_pushButton_clicked()
{
if(_isBeingMouse1 == true)
_isBeingMouse1 = false;
else
_isBeingMouse1 = true;
update();
}
void Dialog::on_pushButton_2_released()
{
if(_isBeingMouse2 == true)
_isBeingMouse2 = false;
else
_isBeingMouse2 = true;
update();
}
Доброго времени суток!
По-поводу метода update()
(из документации):
This function does not cause an immediate repaint; instead it schedules a paint event for processing when Qt returns to the main event loop. This permits Qt to optimize for more speed and less flicker than a call to repaint() does.
Исходя из этих слов от того что вы делаете update()
в слоте обрабатывающем нажатие на кнопку, никакого особо эффекта, т.е. форма будет перерисована когда цикл сообщений дойдет до paintEvent()
, в целом ничего страшного вы не делаете. Вызывать repaint()
внутри paintEvent() крайне не рекомендуется (программа войдет в бесконечный цикл).
По поводу отжатия: если в двух словах, то так задумано самим фреймворком, то что вы хотите сделать лучше делать используя слот toggle()
и свойства down
, check
и checked
Ну и наконец самое главное: посмотрите пример Diagram Scene Example из поставки Qt, там почти то что Вы хотите: рисование линий между двумя объектами (даже со стрелочками).
Я думаю, если заменить объекты, которые есть в примеры на наследников QGraphicsWidget или QGraphicsProxyWidget, то все должно получиться!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Пытаюсь написать FTP-клиент, столкнулся с трудностьюЧтобы зайти на ftp://87
Хочу пройти стажировку в более менее серьёзной компании, так как это будет полезно для профессионального роста, в большинстве требуются...
Делаю прогу, которая должна парсить сайтПри использовании конструкции