Witam, stworzyłem interfejs użytkownika z ikonami, po kliknięciu na ikonę wyświetla się nowe okno (nowe ui). Ikony rysuję za pomocą:
void Icon::mergeIconText(QLabel* label, const QPixmap& pix, const QString txt )
{
QFont myFont("Helvetica", SIZE_ICON_FONT);
QFontMetrics metrics(myFont);
int strWidth = metrics.width(txt);
int strHeight = metrics.height();
int pixWidth = pix.width();
int pixHeight = pix.height();
QPixmap res( qMax(strWidth, pixWidth), strHeight + pixHeight + 6 );
res.fill(Qt::transparent);
QPainter p(&res);
int start = qMax((strWidth-pixWidth)/2, 0);
p.drawPixmap( start ,0, pix );
p.setFont(myFont);
int width = qMax(pixWidth, strWidth);
p.drawText( QRect( 0,pixHeight, width, strHeight+6), Qt::AlignCenter, txt );
label->setText("");
label->setPixmap(res);
label->setFixedSize(res.size());
}
W mainwindow.cpp mam wywołanie:
Icon myIcon;
aboutLabel = new ClickableLabel;
myIcon.mergeIconText(aboutLabel, QPixmap(":/icons/icon/about.ico").scaled(QSize(SIZE_ICON,SIZE_ICON)), "Informacje" );
ui->gridLayout->addWidget(aboutLabel,0,2,1,1);
connect(aboutLabel, SIGNAL(clicked()), this, SLOT(aboutShowForm()) );
MainWindow::aboutShowForm()
{
about = new About(this);
about->show();
}
Tak wygląda konstruktor i destruktor nowego okna.
About::About(QWidget *parent) :
QMainWindow(parent,Qt::FramelessWindowHint),
ui(new Ui::About)
{
ui->setupUi(this);
QWidget::showMaximized();
Icon myIcon;
backLabel = new ClickableLabel();
myIcon.mergeIconText(backLabel, QPixmap(":/icons/icon/back.ico").scaled(QSize(SIZE_ICON,SIZE_ICON)), "" );
ui->gridLayoutTool->addWidget(backLabel,0,0,1,1);
connect(backLabel, SIGNAL(clicked()), this, SLOT(close()) );
}
About::~About()
{
delete ui;
delete backLabel;
close();
}
W nowo otwartym oknie też mam ikony. Wszystko działa poprawnie oprócz tego, że po zamknięciu nowego okna nie zwalnia się pamieć po nim. Co jest nie tak?