Название: Компилируется, но не работает пример из документации по QPainter Отправлено: xintrea от Март 11, 2016, 13:35 В документации на QPainter Qt 5.4.2 написан следующий пример:
Код: void SimpleExampleWidget::paintEvent(QPaintEvent *) Такое переопределение метода paintEvent() должно нарисовать строку "Qt" в центре виджета. Вместо этого в логе пишется: Код: QWidget::paintEngine: Should no longer be called Как побороть? Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: gil9red от Март 11, 2016, 13:46 QApplication создан?
Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: xintrea от Март 11, 2016, 13:46 Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: gil9red от Март 11, 2016, 13:53 Ищите проблему в своем коде, пример работает:
Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: xintrea от Март 11, 2016, 13:55 Ищите проблему в своем коде, пример работает: Блин, и что же искать? Вот мой код: https://github.com/xintrea/mytetra_dev/commit/8ee9002e4e2199f6194f6bcf2d3b13339dfd9a8b Пробовал и с вызовом paintEvent() базового класса, и без него. Виджет можно увидеть нажав Tools - Action Log. Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: Igors от Март 11, 2016, 14:09 Вероятно painter создается в неподходящем месте. Остановитесь на точке где начинает вякать и покажите стек вызов. Еще лучше копилябельный проект (в zip)
Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: kambala от Март 11, 2016, 14:28 скорее всего нельзя просто взять и перекрыть отрисовку таблицы
и пара замечаний: - клэнг выплевывает под 2к ворнингов, большинство из которых лечатся включением 11-го стандарта (но после этого перестает собираться почему-то) - при закрытии приложения происходит краш: Цитировать Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 org.qt-project.QtCore 0x0000000107a0cc4c QLocalePrivate::updateSystemPrivate() + 76 1 org.qt-project.QtCore 0x0000000107a123b5 QLocale::system() + 37 2 org.qt-project.QtCore 0x00000001079ef6a4 QTime::toString(QString const&) const + 36 3 ch.iagentur.mytetra 0x00000001068f75b5 smartPrintDebugMessage(QString) + 261 (main.cpp:222) 4 ch.iagentur.mytetra 0x00000001068f7961 myMessageOutput(QtMsgType, QMessageLogContext const&, QString const&) + 353 (main.cpp:267) 5 org.qt-project.QtCore 0x000000010799f2b5 qt_message_print(QtMsgType, QMessageLogContext const&, QString const&) + 213 6 org.qt-project.QtCore 0x000000010799f12d qt_message_output(QtMsgType, QMessageLogContext const&, QString const&) + 13 7 org.qt-project.QtCore 0x0000000107a84174 QDebug::~QDebug() + 100 8 ch.iagentur.mytetra 0x0000000106a06263 DataBaseConfig::~DataBaseConfig() + 131 (DataBaseConfig.cpp:37) 9 ch.iagentur.mytetra 0x0000000106a06305 DataBaseConfig::~DataBaseConfig() + 21 (DataBaseConfig.cpp:40) Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: xintrea от Март 12, 2016, 20:16 скорее всего нельзя просто взять и перекрыть отрисовку таблицы Можно. На ЛОРе выяснили, что все, что наследуется от QAbstractScrollArea, требует вызова painter-а на viewport(), а не на this, потому что отрисовка на самом деле выполняется на viewport-е. Поэтому для классов, унаследованных от таких классов как QTableView, надо использовать: Код: QPainter painter( viewport() ); и пара замечаний: - клэнг выплевывает под 2к ворнингов, большинство из которых лечатся включением 11-го стандарта (но после этого перестает собираться почему-то) Ну так покажи эти замечания, и напиши версию CLang. В gcc 4.9.2 замечаний ноль. - при закрытии приложения происходит краш: Цитировать Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 org.qt-project.QtCore 0x0000000107a0cc4c QLocalePrivate::updateSystemPrivate() + 76 1 org.qt-project.QtCore 0x0000000107a123b5 QLocale::system() + 37 2 org.qt-project.QtCore 0x00000001079ef6a4 QTime::toString(QString const&) const + 36 3 ch.iagentur.mytetra 0x00000001068f75b5 smartPrintDebugMessage(QString) + 261 (main.cpp:222) 4 ch.iagentur.mytetra 0x00000001068f7961 myMessageOutput(QtMsgType, QMessageLogContext const&, QString const&) + 353 (main.cpp:267) 5 org.qt-project.QtCore 0x000000010799f2b5 qt_message_print(QtMsgType, QMessageLogContext const&, QString const&) + 213 6 org.qt-project.QtCore 0x000000010799f12d qt_message_output(QtMsgType, QMessageLogContext const&, QString const&) + 13 7 org.qt-project.QtCore 0x0000000107a84174 QDebug::~QDebug() + 100 8 ch.iagentur.mytetra 0x0000000106a06263 DataBaseConfig::~DataBaseConfig() + 131 (DataBaseConfig.cpp:37) 9 ch.iagentur.mytetra 0x0000000106a06305 DataBaseConfig::~DataBaseConfig() + 21 (DataBaseConfig.cpp:40) Наверно, любителям CLang и C++11 надо вначале устранить эти замечания? Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: kambala от Март 12, 2016, 20:22 наверно, любителям писать как попало надо вначале устранить эти предупреждения: они вида "this is a C++11 feature, but C++11 option is not enabled". все 2 тыщи копировать сюда не буду, но одно из самых распространенных — это инициализация поля класса в объявлении (это было добавлено лишь в 11-м стандарте).
краш в последней мак ос. на ней тестировалось приложение? Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: xintrea от Март 12, 2016, 21:24 наверно, любителям писать как попало Повторяю, у меня нет ни одного предупреждения. краш в последней мак ос. на ней тестировалось приложение? Предыдущий релиз был под Mac Os X Snow Leopard 10.6.6 (x86-64) пять лет назад: http://webhamster.ru/site/page/index/main/news/147 http://webhamster.ru/site/page/index/articles/projectcode/105 ЗЫЖ У меня нарисовалась новая проблема: QPainter::drawText() в paintEvent - выполнятся, но не рисуется (http://www.prog.org.ru/topic_29924_0.html). Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: kambala от Март 12, 2016, 23:03 Повторяю, у меня нет ни одного предупреждения. и? нигде не написано, что нельзя собирать другими компиляторами. включи -Wpedantic и наверняка те же предупреждения посыпятся.Предыдущий релиз был под Mac Os X Snow Leopard 10.6.6 (x86-64) пять лет назад она (скчанный релиз) не падает. в любом случае, краши надо изучать и фиксить. в современном мире мак ос клэнг является стандартным компилятором — глупо его не поддерживать на мой взгляд.Название: Re: Компилируется, но не работает пример из документации по QPainter Отправлено: Igors от Март 13, 2016, 06:05 Можно. На ЛОРе выяснили, что все, что наследуется от QAbstractScrollArea, требует вызова painter-а на viewport(), а не на this, потому что отрисовка на самом деле выполняется на viewport-е. Поэтому для классов, унаследованных от таких классов как QTableView, надо использовать: Только это должно быть там где рисуется сам viewport (а не таблица). Код: QPainter painter( viewport() ); |