Nominate our 2022 Qt Champions!

QLabel size, packing algorithm

  • Hi,

    I am developing a Text Mining application. Part of the functionality is to create visualization. I am developing a packing algorithm in separate class, this algorithm generates a QList of QLabls, and a QList of QPoints.
    How it works:
    I have x and y values initialized to 5 (in this case),
    I have string values stored in the model,
    I am taking strings one by one,
    Taken string is used to create a label, label is added to the list QLabels
    Values x and y are used to construct the QPoint, and next added to the list of QPoints

    New values x and y are calculated for the next label
    calculate by formula :

    @x= x + lbl->width()+2;
    if (x >= 1200) {
    x = 5;
    y += lbl->height() +2;

    Process continues ...

    Then pointers to the both lists are passed to the Form class and displayed on the form.

    Here is the whole code:
    void packer::createColoredLabels(){


    int x = 5;
    int y = 5;

    lablesList = new QList<QLabel*>;
    coords = new QList<QPoint>;
    for(int j=0; j< wCount ; j++){

      QString lblName = model->item(j,0)->text();
      QLabel *lbl = new QLabel(lblName);
      QPoint p = QPoint(x,y);
      x= x + lbl->width()+2;
      if (x >= 1200) {
          x = 5;
          y += lbl->height() +2;



    The problem I have is that when I execute the application I see that the coordinates are not calculated correctly, each label inherits properties from QWidget and assign its size. So each label size is fixed to 640x480.

    But if i use


    commented out in the code I am getting the desired results, that means each label size is actually the size it takes(not 640x480 as above), and everything works as intended. The only thing is I am seeing the small window popping up during the process of generating coordinates by the packing algorithm.

    So finally the question is:

    Is there any other way than


    To force the label to get the its actual size instead of inherited 640x480?


Log in to reply