【问题标题】:QT QPixmap won't scroll in QScrollAreaQT QPixmap 不会在 QScrollArea 中滚动
【发布时间】: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-&gt;setWidget(labeltime);?另外,为什么你需要一个布局呢?我认为您可以直接设置小部件。
  • 对不起,ui->overview 是我的 gui 中预定义的 scrollArea

标签: c++ qt qpainter qtgui qscrollarea


【解决方案1】:

由于您只有一个子小部件,因此消除布局会更简单。更改这些行:

layout->addWidget(labeltime);
ui->overview->setLayout(layout);

到:

ui->overview->setWidget(labeltime);

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多