我将代码从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();
}
有谁知道为什么我会收到这些警告?此外,我一直在使用的小部件都没有出现,唯一显示的是一个空白框,其中布局曾经是。如果我无法解决这个问题,我会回到qt 4.x。
答案 0 :(得分:1)
您没有显示代码的相关部分。似乎有一些自定义小部件在其基类上调用paintEngine()
方法(这是不允许的)。通过查找paintEngine()
电话找到该小部件并进行修复。