如何使用Pixmap(QList)更改动态QLabel

时间:2015-07-27 10:11:32

标签: qt qpixmap qlabel qlist

我有以下场景:使用添加按钮我创建一个动态QLabel,它获得一个QPixmap,第一个与另一个不同。所以,如果我添加第二个,一切都很好。问题从添加第三个开始。然后我的第二个显示的标签应该被替换。我给你一些图片来解释我的问题和我的源代码。 首先,点击两次后的当前情况图片点击:2times add

在这之后我第三次点击它,你可以看到中间的像素图应该替换为没有交叉开关的像素图: enter image description here

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    counter=0;

    ui->setupUi(this);

    //Verteiler links

}
MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::on_pushButton_add_clicked()
{


    int xposition;
    QPixmap vert_links("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_links");
    QPixmap vert_mitte("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_mitte");
    QPixmap vert_rechts("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_rechts");

    QLabel *label = new QLabel ();
    //add Label to the List
    qlist.append(label);

    xposition=counter*60;

    if  (counter==0)
    {
        label->setPixmap(vert_links);
    }
    else
    {
        xposition=xposition+35;
        label->setPixmap(vert_rechts);
    }
    if (counter>1)
    {
        QLabel *label2 = new QLabel ();
        label2->setPixmap(vert_mitte);
        label2->show();
        label2->setParent(this);
        label2->setGeometry((xposition-60),500,125,172);
        qlist.replace(2,label2);

    }
    label->setParent(this);
    label->setGeometry((xposition),500,125,172);
    label->show();

    counter++;

}

我从QT" setGeometry得到以下错误:无法在QLabelClassWindow'上设置几何体89x172 + 915 + 454。产生的几何形状:116x172 + 915 + 454(框架:8,30,8,8)。" 我想是的,因为我只是更改了列表中的值而不是显示的值,但我不知道如何正确编码。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我明白了

void MainWindow::on_pushButton_add_clicked()
{


    int xposition;
    QPixmap vert_links("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_links");
    QPixmap vert_mitte("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_mitte");
    QPixmap vert_rechts("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_rechts");

    QLabel *label = new QLabel ();
    //add Label to the List


    xposition=counter*60;

    if  (counter==0)
    {
        label->setPixmap(vert_links);
    }
    else
    {
        xposition=xposition+35;
        label->setPixmap(vert_rechts);
    }
    if (counter>1)
    {
     qlist.last()->setPixmap(vert_mitte);

    }
    qlist.append(label);
    label->setParent(this);
    label->setGeometry((xposition),500,125,172);
    label->show();

    counter++;

}

在添加新的listitem之前,只需将我的上一个listitem更改为另一个pixmap。 唯一剩下的问题是如何设置特定列表项的数据。像前一个一样