2014-10-10 22 views
0

我將我的代碼從Qt 4.x移動到Qt 5.3,我遇到了命令提示符中顯示的一個奇怪的Qt警告。有沒有錯誤或什麼,但命令提示符將顯示如下:Qt 5.3 QWidget :: paintEngine:不應該再被調用

QWidget::paintEngine: Should no longer be called 
QPainter::begin: Paint device returned engine == 0, type: 1 
QPainter::setClipRegion: Painter not active 
QPainter::setClipRect: Painter not active 

我相信,我把範圍縮小到一個類: 標題:

#pragma once 

#include <QtCore\qmetaobject.h> 
#include <QtWidgets\Qwidget.h> 
#include <QtWidgets\Qslider.h> 
#include <Qtwidgets\Qpushbutton.h> 
#include <Qtwidgets\Qcheckbox.h> 
#include "MyGLWindow.h" 
#include <QtWidgets\QHboxLayout> 
#include <QtWidgets\QVboxLayout> 
#include <QtWidgets\qmenubar.h> 
#include <QtWidgets\qlabel.h> 

class MeWidg : public QGLWidget 
{ 
public: 
    QTimer myTimer; 
    bool testToggle; 
    float testRow; 
    bool noToggle; 

    MyGLWindow *gameGLWindow; 
    MeWidg(); 
private: 
    void myUpdate(); 
    void loadModel(); 
}; 

和來源:

#include "MeWidg.h" 
#include "DebugMenu.h" 

MeWidg::MeWidg() 
{ 
QVBoxLayout* mainLayout=new QVBoxLayout(); 
setLayout(mainLayout); 

QHBoxLayout* setUpLayout=new QHBoxLayout(); 

setWindowTitle("Game Creator"); 

QHBoxLayout *game =new QHBoxLayout(); 
gameGLWindow=new MyGLWindow(); 

debugMenu.initialize(setUpLayout); 
debugMenu.addLayout("World"); 

QMenuBar* mb=new QMenuBar(); 
mb->setMaximumHeight(20); 

QMenu* fileMenu = mb->addMenu("File"); 

QAction* action; 
fileMenu->addAction(action = new QAction("Load Project", this)); 
//action->setShortcut(QKeySequence::Open); 
//connect(action, SIGNAL(triggered()), this, SLOT(loadObj())); 

fileMenu->addAction(action = new QAction("Save Project", this)); 
//action->setShortcuts(QKeySequence::Save); 
//connect(action, SIGNAL(triggered()), this, SLOT(saveNative())); 

fileMenu->addSeparator(); 

fileMenu->addAction(action = new QAction("Load level", this)); 
//action->setShortcuts(QKeySequence::Save); 
//connect(action, SIGNAL(triggered()), this, SLOT(loadLVL())); 

fileMenu->addAction(action = new QAction("Save Level", this)); 
//action->setShortcuts(QKeySequence::Save); 
//connect(action, SIGNAL(triggered()), this, SLOT(saveNative())); 

fileMenu->addSeparator(); 

fileMenu->addAction(action = new QAction("Close", this)); 
//action->setShortcuts(QKeySequence::Save); 
//connect(action, SIGNAL(triggered()), this, SLOT(saveNative())); 

QMenu* objectMenu=mb->addMenu("Objects"); 
objectMenu->addAction(action=new QAction("Load Model", this)); 
//action->setShortcut(QKeySequence::Open); 
connect(action, &QAction::triggered, [=]() { this->loadModel();}); 

objectMenu->addAction(action=new QAction("Add Light", this)); 
//action->setShortcut(QKeySequence::Open); 
//connect(action, SIGNAL(triggered()), this, SLOT(loadObj())); 

objectMenu->addAction(action=new QAction("Add Sound", this)); 
//action->setShortcut(QKeySequence::Open); 
//connect(action, SIGNAL(triggered()), this, SLOT(loadObj())); 

objectMenu->addAction(action=new QAction("Add Game Object", this)); 
//action->setShortcut(QKeySequence::Open); 
//connect(action, SIGNAL(triggered()), this, SLOT(loadObj())); 

mainLayout->addWidget(mb); 

game -> addWidget(gameGLWindow,1, 0); 
setUpLayout -> addLayout(game); 
gameGLWindow->setMinimumHeight(600); 
gameGLWindow->setMinimumWidth(500); 

mainLayout->addLayout(setUpLayout, 1); 

connect(&myTimer, &QTimer::timeout, [=]() { this->myUpdate(); }); 
myTimer.start(16); 
} 

void MeWidg::myUpdate() 
{ 
debugMenu.update(); 

if(GetAsyncKeyState(VK_ESCAPE) && !noToggle) 
{ 
    noToggle=true; 
    debugMenu.toggleVisibility(); 
} 
else if(!GetAsyncKeyState(VK_ESCAPE) && noToggle) 
{ 
    noToggle=false; 
} 
} 

void MeWidg::loadModel() 
{ 
gameGLWindow->loadModel(); 
} 

有人會知道我爲什麼會收到這些警告嗎?也沒有我一直在使用的小工具顯示出來,唯一顯示的是一個空白框,佈局曾經是。如果我無法弄清楚這一點,我會勉強回到qt 4.x.

回答

1

您沒有顯示代碼的相關部分。似乎有一些自定義小部件在它的基類上調用paintEngine()方法(這是不允許的)。通過查找paintEngine()呼叫找到該小部件並進行修復。

相關問題