2017-06-01 105 views
0

我是Qt的新手。现在我正在尝试绘制一个简单的应用程序。 主要思想 - 我在mainwindow中有一个额外的小部件,它有一个QLabel,显示一个QImage(我的画布用于绘制像素)。问题是我无法正确设置imgDisplayer标签的大小。它总是比我想要的要小,并且Y坐标错误。起初我想imgDisplayer->setGeometry(0,0, this->width(), this->height());,但它并没有正常工作,以及(标签是非常小的)无法正确确定QLabel的尺寸

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

回答

0

最简单的解决方案是使用layout来管理子窗口小部件...

/* 
* 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); 

或者,如果你真的想imgDisplayerDrawingArea的直接孩子,你可以覆盖QWidget::resizeEvent,并利用这个机会来设置它的形状......

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