2017-06-01 5 views
0

Ich bin neu in Qt. Jetzt versuche ich eine einfache App zum Zeichnen zu erstellen. Die Hauptidee - Ich habe ein zusätzliches Widget im Hauptfenster, das ein QLabel hat, das ein QImage zeigt (meine Leinwand zum Zeichnen von Pixeln). Das Problem ist, dass ich die Größe des imgDisplayer Labels nicht richtig einstellen kann. Es scheint immer kleiner zu sein als ich will und eine falsche Y-Koordinate hat. Zuerst habe ich versucht imgDisplayer->setGeometry(0,0, this->width(), this->height()); aber es funktionierte nicht korrekt als gut (das Label war sehr klein)QLabel kann nicht korrekt skaliert werden

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
ui->setupUi(this); 

area = new DrawingArea(this); 
area->setGeometry(0,0,this->width(),this->height()/2); 
area->show(); 

button = new QPushButton("Draw", this); 
int bwidth = 100, bheight = 50; 
button->setGeometry(200, 300, bwidth, bheight); 
connect(button, SIGNAL(clicked(bool)), this, SLOT(getPoint())); 
} 

DrawingArea.cpp

DrawingArea::DrawingArea(QWidget *parent) : QWidget(parent) 
{ 
setBackgroundRole(QPalette::Base); 
setAutoFillBackground(true); 

canvas = new QImage(300, 300, QImage::Format_RGB32); 
QRgb val = qRgb(189,149,39); 
canvas->fill(Qt::gray); 
canvas->setPixel(4,4,val); 
canvas->setPixel(5,4,val); 


imgDisplayer = new QLabel(this); 
imgDisplayer->setGeometry(0, 0, parent->width(), parent->height()); 
imgDisplayer->setPixmap(QPixmap::fromImage(*canvas)); 
imgDisplayer->show(); 

displayer = new QLabel(this); 
} 

Screenshot

Antwort

0

Die einfachste Lösung ist die Verwendung eines layout, um untergeordnete Widgets zu verwalten ...

/* 
* Create the QLabel and set its pixmap. 
*/ 
imgDisplayer = new QLabel; 
imgDisplayer->setPixmap(QPixmap::fromImage(*canvas)); 

/* 
* Create the layout and add imgDisplayer to it. 
*/ 
auto *layout = new QHBoxLayout(this); 
layout->addWidget(imgDisplayer); 

Alternativ, wenn Sie wirklich wollen imgDisplayer ein direkter Nachkomme des DrawingArea sein, Sie QWidget::resizeEvent und nutzen diese Möglichkeit außer Kraft setzen kann seine Geometrie zu setzen ...

void DrawingArea::resizeEvent (QResizeEvent *event) override 
{ 
    QWidget::resizeEvent(event); 
    imgDisplayer->setGeometry(rect()); 
} 
Verwandte Themen