【发布时间】:2013-12-29 15:21:43
【问题描述】:
我正在尝试在 QPixmap 中使用 QPainter 进行绘制,将 QPixmap 放在 QLabel 中,并将 QLabel 放在 QScrollArea 中。
有时绘制的像素图比我的 ScrollArea 允许的大,但不知何故它不会滚动显示其余部分。我做错了什么?
QPixmap *pixmap = new QPixmap(10000,500);
QLabel *labeltime = new QLabel;
QHBoxLayout *layout = new QHBoxLayout;
pixmap->fill(QColor("transparent"));
int currentX = 0;
const int currentY = 220;
const int height = 50; // Coming from some static data initialization
QPainter *painter = new QPainter(pixmap);
QPen pen(Qt::gray, 2);
painter->setPen(pen);
for(int i = 0; i< viewlist.size(); i++)
{
QBrush brush(QColor(viewlist[i].color));
painter->setBrush(brush);
painter->drawRect(currentX, currentY, viewlist[i].length, height);
currentX += viewlist[i].length;
}
labeltime->setPixmap(*pixmap);
layout->addWidget(labeltime);
ui->overview->setLayout(layout);
我知道添加像素图的方法很长而且很奇怪,但我希望它可以滚动,而且我不能在 QScrollArea 上绘画。有没有更好的办法?或者谁能告诉我哪里出了问题?
谢谢
【问题讨论】:
-
我猜您正在尝试基于此进行操作:stackoverflow.com/questions/20801622/… 您为什么不使用 QML 而不是 QPainter 方法?在这样的新代码中会更容易。
-
是的,我从未使用过 QML,并且对您建议的 QPainter 结果非常满意。
-
当然滚动除外
-
我在您的代码中没有看到任何
QScrollArea实验。那么当你添加这两行时会发生什么:scrollArea = new QScrollArea; scrollArea->setWidget(labeltime);?另外,为什么你需要一个布局呢?我认为您可以直接设置小部件。 -
对不起,ui->overview 是我的 gui 中预定义的 scrollArea
标签: c++ qt qpainter qtgui qscrollarea