我有一个很大的QWidget(w_mapa),有很多QPushButton,我用这段代码从中得到jpg图片
QRect rectangle=ui->w_mapa->rect();
QRect uno,dos,tres,cuatro;
uno=QRect(rectangle.x(),rectangle.y(),rectangle.width()/2,rectangle.height()/2);
dos=QRect(rectangle.x()+rectangle.width()/2,rectangle.y(),rectangle.width()/2,rectangle.height()/2);
tres=QRect(rectangle.x(),rectangle.y()+rectangle.height()/2,rectangle.width()/2,rectangle.height()/2);
cuatro=QRect(rectangle.x()+rectangle.width()/2,rectangle.y()+rectangle.height()/2,
rectangle.width()/2,rectangle.height()/2);
QPixmap pixmap(uno.size());
ui->w_mapa->render(&pixmap, QPoint(), QRegion(uno));
QString nombre_fichero=QString("x%1uno.jpg").arg(tam_castillos);
pixmap.save(nombre_fichero);
pixmap=QPixmap(dos.size());
ui->w_mapa->render(&pixmap, QPoint(), QRegion(dos));
nombre_fichero=QString("x%1dos.jpg").arg(tam_castillos);
pixmap.save(nombre_fichero);
pixmap=QPixmap(tres.size());
ui->w_mapa->render(&pixmap, QPoint(), QRegion(tres));
nombre_fichero=QString("x%1tres.jpg").arg(tam_castillos);
pixmap.save(nombre_fichero);
pixmap=QPixmap(cuatro.size());
ui->w_mapa->render(&pixmap, QPoint(), QRegion(cuatro));
nombre_fichero=QString("x%1cuatro.jpg").arg(tam_castillos);
pixmap.save(nombre_fichero);
此代码有效,但如果QPushButton的数量较大,则程序崩溃并且调试器会在QList中显示sigsegv分段错误。
然后我尝试使用此代码将jpg分成4部分:
...
private:
QList<QPushButton*> buttons;
...
此代码有效,我得到4个jpg文件,但我需要生成1。
我正在搜索有关此错误的信息但未成功
我可以融合4个jpg文件吗?或者解决这个错误?
对不起我的英语,我正在学习。
代码详情: MainWindow.h
...
void MainWindow::showMap(){
for(int i=0;i<buttons.size();i++)
delete buttons.at(i);
buttons.clear();
QList<coordinates> coordinates;//external data from request
//coordinates have x position, y position and name
for(int i=0;i<coordinates.size();i++)
{
QPushButton *aux=new QPushButton(ui->w_mapa);
aux->setName(coordinates.name);
aux->move(coordinates.x,coordinates.y);
buttons.append(aux);
}
QPixmap pixmap(ui->w_mapa.size());
ui->w_mapa->render(&pixmap);
QString nombre_fichero="x1.jpg";
pixmap.save(nombre_fichero);
}
MainWindow.cpp
QRect rectangle=ui->w_mapa->rect();
QRect unoydos,tresycuatro;
QPixmap all(rectangle.size());
QPainter painter(&all);
unoydos=QRect(rectangle.x(),rectangle.y(),rectangle.width(),rectangle.height()/2);
tresycuatro=QRect(rectangle.x(),rectangle.y()+rectangle.height()/2,rectangle.width(),rectangle.height()/2);
QPixmap pixmap(unoydos.size());
ui->w_mapa->render(&pixmap, QPoint(), QRegion(unoydos));
painter.drawPixmap(0,0,unoydos.width(),unoydos.height(),pixmap);
pixmap=QPixmap(tresycuatro.size());
ui->w_mapa->render(&pixmap, QPoint(), QRegion(tresycuatro));
painter.drawPixmap(0,unoydos.height(),tresycuatro.width(),tresycuatro.height(),pixmap);
all.save(QString("x%1.jpg").arg(tam_castillos));
解决: 我没有修复崩溃,但我在两个Pixmaps中分离了QWidget :: render(),然后合并了这个Pixmaps。
pygame-1.9.2a0-cp35-none-win_amd64.whl is not a supported wheel on this platform.