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
  опции профиля:
сообщение 17.9.2014, 9:52
Сообщение #2


Студент
*

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

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




Репутация:   0  


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


Вообще virtual тут вообще не поможет. Если не рассматривать очевидные случаи( например для paintEvent, timerEvent) про которые и так все знают, ты никогда не узнаешь есть эта виртуальная функция в базовом классе или нет.
Например, у меня есть базовый класс и класс наследник, я добавил в класс наследник виртуальный метод virtual void method(). Это же не говорит о том что в базовом классе есть такой виртуальный метод. Поэтому никак нельзя догадаться что virtual продублирован, а не появился только сейчас.

Сейчас уже стандарт С++14 приняли. Все основные компиляторы уже поддерживают С++11.
Не так трудно в pro файле написать CONFIG += c++11 и пользоваться полезными нововведениями, даже если где то ещё не полная поддержка.
Там же столько вкусностей, например новый синтаксис для connect.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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


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