簡體   English   中英

Qt 5.3 QWidget :: paintEngine:應該不再被調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM