crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

Гость_Userg_*
сообщение 16.9.2014, 1:25
Сообщение #1





Гости








    


Подскажите, что происходит.
Есть код:

main.cpp
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}


widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected:
    virtual void paintEvent(QPaintEvent *);

};

#endif // WIDGET_H



widget.cpp
#include "widget.h"

#include <QSpinBox>
#include <QDebug>
#include <QPushButton>

float alpha = 0;

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    resize(400, 300);
    QSpinBox *spinBoxAlpha = new QSpinBox(this);
    spinBoxAlpha->setEnabled(true);
    spinBoxAlpha->setSingleStep(1);
    spinBoxAlpha->setValue(1);
    spinBoxAlpha->setGeometry(40, 40, 50,30);

    QPushButton *buttonExit = new QPushButton(this);
    buttonExit->setText("Exit");
    buttonExit->setGeometry(40, 10, 50,30);
    connect (buttonExit, SIGNAL(clicked()), this,SLOT(close()));
}

Widget::~Widget()
{
}

void Widget::paintEvent(QPaintEvent *)
{
    qDebug() << alpha++;
    return;

}


Постоянно "прилетает" paintEvent.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
marsel
  опции профиля:
сообщение 16.9.2014, 10:49
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 29.1.2013
Пользователь №: 3693

Спасибо сказали: 3 раз(а)




Репутация:   0  


Всё очень просто. У тебя в spinBox курсор мигает?
paintEvent вызывается, когда надо перерисовать что то. Вот спинбокс и вызывает paintEvent, чтобы нарисовать или стереть курсор.

И по коду, зачем перед void paintEvent(QPaintEvent *) написал virtual? Она же и так виртуальная.

Лучше уж тогда использовать override из 11 стандарта или уж ничего не писать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ahalaj
  опции профиля:
сообщение 16.9.2014, 13:08
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 14.6.2014
Пользователь №: 4166

Спасибо сказали: 13 раз(а)




Репутация:   1  


Цитата(marsel @ 16.9.2014, 11:49) *
И по коду, зачем перед void paintEvent(QPaintEvent *) написал virtual? Она же и так виртуальная.

Для лучшей читабельности IMHO. Исходный текст прежде всего читать будет сам автор лет через несколько (и может быть кто-нибудь ещё), а уже после компилятор C++, которому как раз по барабану указано ли "virtual" только в родном заголовочном файле Qt или же продублировано ещё у автора.

Цитата(marsel @ 16.9.2014, 11:49) *
Лучше уж тогда использовать override из 11 стандарта или уж ничего не писать.

Это только для C++ 11, на который пока ещё не все перешли. Иначе явный virtual, облегчает чтение исходников и не вынуждает лазить в заголовки чтобы узнать виртуальная это функция или нет или забивать мозги запоминанием полных сигнатур функций.

Это естественно всё моё IMHO, никому не навязываю, просто говорю что так реально удобнее. Написать лишние 7 букв virtual не так сложно и не так затратно по времени по сравнению с поиском/запоминанием всего и вся.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 15.4.2025, 7:47