Qt 5.3 QWidget :: paintEngine:不应再被调用

时间:2014-10-10 19:08:29

标签: c++ qt

我将代码从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。

1 个答案:

答案 0 :(得分:1)

您没有显示代码的相关部分。似乎有一些自定义小部件在其基类上调用paintEngine()方法(这是不允许的)。通过查找paintEngine()电话找到该小部件并进行修复。