[英]Qt 5.3 QWidget::paintEngine : Should no longer be called
我將我的代碼從Qt 4.x移到Qt 5.3,並且在命令提示符下遇到了奇怪的Qt警告。 沒有錯誤或任何東西,但命令提示符將顯示以下內容:
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();
}
誰知道我為什么收到這些警告? 同樣,我一直在使用的所有小部件都沒有顯示,唯一顯示的是一個以前放置布局的空白框。 如果我不知道這一點,我將回到qt4.x。
您沒有顯示代碼的相關部分。 似乎有一些自定義窗口小部件在其基類上調用paintEngine()
方法(這是不允許的)。 通過查找paintEngine()
調用並對其進行修復,以找到該小部件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.