Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2020, 19:54   #1
Kirill_1103
Пользователь
 
Регистрация: 14.04.2020
Сообщений: 11
По умолчанию Qt - Создал виджет, наследуемый от QPushButton. При выводе нет анимации нажатия, как это исправить?

Здравствуйте. Я новичок, учу Qt.
Создал виджет, наследуемый от QPushButton. При выводе нет анимации нажатия, как это исправить?
Заранее спасибо!
Код:
#include <QtWidgets>
class myWidget:public QPushButton
{
public:
    myWidget(QPushButton *parent =0)
    {
        setFixedSize(50,50);
    }
private:
    void paintEvent(QPaintEvent*);
};
void myWidget::paintEvent(QPaintEvent*)
{

    QPainter painter(this);
    painter.setPen(QPen(Qt::black,2));
    painter.drawLine(QLine(20,20,30,30));
    painter.drawLine(QLine(20,30,30,20));
    painter.end();
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    myWidget *wgt = new myWidget;
    QWidget *l = new QWidget();
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(wgt);
    l->setLayout(layout);
    l->show();
    return a.exec();
}
Kirill_1103 вне форума Ответить с цитированием
Старый 15.04.2020, 10:14   #2
Subst
Пользователь
 
Регистрация: 30.01.2020
Сообщений: 54
По умолчанию

Ну для начала, в таких случаях, мой совет - велкам ту исходники
Это универсальный совет

В частности..
qtbase\src\widgets\widgets\qpushbut ton.cpp

видим
Код:
void QPushButton::paintEvent(QPaintEvent *)
{
    QStylePainter p(this);
    QStyleOptionButton option;
    initStyleOption(&option);
    p.drawControl(QStyle::CE_PushButton, option);
}
именно этот метод смотрю, поскольку ты его переопределил

дальше можно покурить доки, но скажу сразу, поскольку интуитивно предполагаю. Именно в QStyleOptionButton option определены псевдосостояния кнопки, нажата, недоступна и пр.

А QStylePainter отрисует кнопку в соответствии с примененным стилем и псевдосостояниями.

Таким образом в идеале тебе надо не просто нарисовать пару линий поверх, но и вообще-то нарисовать кнопку для всех возможных псевдосостояний.
А в простом случае вызвать родительский paintEvent в теле твоего paintEvent

Можно в начале метода, чтобы он отрисовал "все сложности" кнопки, а потом уже поверх нарисуй твои линии.

Т.е. в самом начале метода вызови QPushButton:aintEvent(event);
Subst вне форума Ответить с цитированием
Старый 15.04.2020, 16:41   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от Kirill_1103 Посмотреть сообщение
При выводе нет анимации нажатия
так ты не нарисовал анимацию, у тебя статичная картинка в
Код:
myWidget::paintEvent
проверяй состояние

Код:
bool isDown() const

Последний раз редактировалось Алексей1153; 15.04.2020 в 16:43.
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить обработчик события нажатия на клавишу REztor C# (си шарп) 4 02.01.2015 12:59
Изменить наследуемый метод anlu Общие вопросы C/C++ 2 20.12.2011 13:26
Не рисует наследуемый класс. TwiX Общие вопросы Delphi 7 03.10.2009 11:59
Создание анимации нажатия на кнопку Alex Cones Общие вопросы Delphi 8 27.04.2009 19:06