2015-07-13 9 views
0

С Qt Я хочу напечатать несколько виджетов на одной странице DINA4. Скажем, у меня есть 3 виджетов, которые я хочу, чтобы поместить непосредственно рядом друг с другом:Отобразить виджетов на разные позиции на paintdevice

------- 
| A | 
------- 
| B | 
------- 
| C | 
------- 

Как я сделать их в своем коде ниже, все 3 виджеты оказываются друг над другом на постион С (или даже и B вообще не отображаются, я этого не вижу). Я намеревался переместить каждый виджет немного по размеру последнего виджета, чтобы отобразить его непосредственно рядом с последним. Это, кажется, не работает:

int lastWidgetHeight; 
lastWidgetHeight= 0; 

for (int i = 0; i < this->widgets.size(); i++){ 
    Wid* e = widgets.at(i); 
    QWidget *printBox = e->printArea(); 

    // define float scaleX and scaleY [...] 

    QPainter painter; 
    painter.begin(printer); 
    painter.scale(scaleX,scaleY); 

    // render and translate in y-direction: 
    printBox->render(&painter, QPoint(0,lastWidgetHeight)); // <-- My idea 

    painter.end(); 

    lastWidgetHeight+= e->height(); 
} 

Если все 3 виджетов визуализируется, то как петля влияет на положение А и В, так как я создаю новый QPainter-Object каждый раз?

+0

Не нужно каждый раз воссоздавать художника. Просто повторите использование того же самого живописца, созданного вне цикла. Вы также можете настроить перевод художника так, чтобы последующие виджеты отображались в разных положениях. –

ответ

0

Вы можете установить 3 элемента в макете

QVVoxLayout *Vertical_layout; 
this->getLayout()->addLayout(this->Vertical_layout); 
Vertical_layout->addItem(ElementA); 
Vertical_layout->addItem(ElementB); 
Vertical_layout->addItem(ElementC); 

и вы можете установить расстояние между ними:

Vertical_layout- >setContentsMargins(left,top,right,bottom); 

с тем, что они всегда будут на своем месте.

+0

Они уже появляются на экране. Конечно, я мог бы попытаться отобразить весь виджет, к которому они добавлены, но также должно быть возможно напечатать их отдельно друг от друга. Это то, что я пытался. – user2366975