C++ 当我在运行程序之外的任何地方单击时,所有图形都会消失
我试图在Qt上创建类似于network的东西,但在运行程序时,我遇到了一个奇怪的错误,当我单击运行程序之外的任何地方或打开任何其他应用程序时,所有的图形都消失了。 这是密码C++ 当我在运行程序之外的任何地方单击时,所有图形都会消失,c++,qt,C++,Qt,我试图在Qt上创建类似于network的东西,但在运行程序时,我遇到了一个奇怪的错误,当我单击运行程序之外的任何地方或打开任何其他应用程序时,所有的图形都消失了。 这是密码 #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); this-&
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setFixedSize(210*6+10,this->height());
Lobes["Frontal Lobe"] = {"Higher Mental \n function",
"Broca's area",
"Motor Function\n(Eye Movement)"};
Lobes["Partial Lobe"] = {"Motor Function\n(Muscles)",
"Somatosensory \n association\narea",
"Sensory Area"};
Lobes["Temporal Lobe"] = {"Association area",
"Auditory area",
"Wernicke's area"};
Lobes["Occiptal Lobe"] = {"Visual area"};
SizeCalculations();
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent* e)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::red);
it = Lobes.begin();
int space = 10;
for(int x = 0; x < 6; x++)
{
if(x < 6)
{
Node *Rec = new Node(CognitveSpace,50,CogitiveFunctions[x],0,szCogntive);
painter.drawRect(Rec->getRectangle());
painter.drawText(Rec->getRectangle(), Qt::AlignCenter, Rec->getName());
// painter.fillRect(Rec->getRectangle(),Qt::red);
CognitveSpace += szCogntive.width()+10;
}
if(x < 4)
{
Node *Rec = new Node(LobesSpace,250,it->first,0,szLobes);
painter.drawRect(Rec->getRectangle());
painter.drawText(Rec->getRectangle(), Qt::AlignCenter, Rec->getName());
// delete Rec;
for(size_t index = 0; index < it->second.size();index++)
{
Node *Rec = new Node(AreasSpace,450,it->second[index],0,szAreas);
painter.drawRect(Rec->getRectangle());
painter.drawText(Rec->getRectangle(), Qt::AlignCenter, Rec->getName());
space += 180;
//delete Rec;
AreasSpace += szAreas.width()+10;
}
it++;
LobesSpace += szLobes.width()+10;
AreasSpace = LobesSpace +15;
}
}
}
void Widget::SizeCalculations()
{
szCogntive.setWidth((this->width() / 6) - CognitveSpace);
szLobes.setWidth((this->width() / 4) - LobesSpace);
szAreas.setWidth(szLobes.width()/3 - 15);
}
void Widget::on_pushButton_clicked()
{
}
#包括“widget.h”
#包括“ui_widget.h”
Widget::Widget(QWidget*父项):
QWidget(母公司),
ui(新ui::小部件)
{
用户界面->设置用户界面(此);
此->设置固定大小(210*6+10,此->高度());
肺叶[“额叶”]={“高级心理功能”,
“布罗卡区”,
“运动功能\n(眼球运动)”};
肺叶[“部分肺叶”]={“运动功能\n(肌肉)”,
“体感\n关联\n区域”,
“感觉区”};
肺叶[“颞叶”]={“关联区”,
“听觉区”,
“韦尼克区”};
肺叶[“枕叶”]={“视区”};
大小计算();
}
小部件::~Widget()
{
删除用户界面;
}
void小部件::paintEvent(QPaintEvent*e)
{
油漆工(本);
painter.setRenderInt(QPainter::抗锯齿);
画师:设置笔(Qt::红色);
它=波瓣。开始();
int空间=10;
对于(int x=0;x<6;x++)
{
if(x<6)
{
Node*Rec=新节点(认知空间,50,认知函数[x],0,sz认知);
painter.drawRect(Rec->getRectangle());
drawText(Rec->getRectangle(),Qt::AlignCenter,Rec->getName());
//fillRect(Rec->getRectangle(),Qt::red);
CognitveSpace+=szcognitive.width()+10;
}
if(x<4)
{
Node*Rec=新节点(LobesSpace,250,it->first,0,szLobes);
painter.drawRect(Rec->getRectangle());
drawText(Rec->getRectangle(),Qt::AlignCenter,Rec->getName());
//删除Rec;
对于(size\u t index=0;indexsecond.size();index++)
{
Node*Rec=新节点(AreasSpace,450,it->second[index],0,szAreas);
painter.drawRect(Rec->getRectangle());
drawText(Rec->getRectangle(),Qt::AlignCenter,Rec->getName());
空间+=180;
//删除Rec;
AreasSpace+=szAreas.width()+10;
}
it++;
LobesSpace+=szLobes.width()+10;
面积空间=波瓣空间+15;
}
}
}
void小部件::SizeCalculations()
{
setWidth((this->width()/6)-CognitveSpace);
setWidth((this->width()/4)-LobesSpace);
setWidth(szLobes.width()/3-15);
}
无效小部件::在按钮上单击
{
}
这是一个简单的问题:绘制事件实际上应该是常量。每次重新绘制时,您都会重复修改各种尺寸。但我们可以让编译器帮你解决问题-让我们修改代码,使你的对象在绘画中保持不变:
void Widget::paintEvent(QPaintEvent *event) {
QPainter painter(this);
paintEvent(event, painter);
}
void Widget::paintEvent(QPaintEvent *, QPainter &painter) const { // const is important!
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::red);
// etc - rest of the code follows
}
// Declaration in the class
void paintEvent(QPaintEvent *, QPainter &) const; // const!!
现在编译-编译器会将修改对象的所有位置标记为错误。您需要将这些计算移到其他位置,以便绘画不会修改对象。然后它就会工作。这是一个简单的问题:绘制事件实际上应该是常量。每次重新绘制时,您都会重复修改各种尺寸。但我们可以让编译器帮你解决问题-让我们修改代码,使你的对象在绘画中保持不变:
void Widget::paintEvent(QPaintEvent *event) {
QPainter painter(this);
paintEvent(event, painter);
}
void Widget::paintEvent(QPaintEvent *, QPainter &painter) const { // const is important!
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::red);
// etc - rest of the code follows
}
// Declaration in the class
void paintEvent(QPaintEvent *, QPainter &) const; // const!!
现在编译-编译器会将修改对象的所有位置标记为错误。您需要将这些计算移到其他位置,以便绘画不会修改对象。然后它就会工作。问题中的代码和类似代码。不在外部链接后面(特别是不在断开的链接后面)。代码和类似的东西都在问题中。不在外部链接后面(特别是不在断开的链接后面)。