У меня есть следующий сценарий: с кнопкой добавления я создаю динамический QLabel, и он получает QPixmap, первый отличается от другого. Поэтому, если я добавлю второй, все будет хорошо. Проблема начинается с добавления третьего. Затем мой второй показанный ярлык должен быть заменен. Я даю вам некоторую картину, которая объяснит мою проблему и мой исходный код. На первом снимке текущей ситуации после того, как 2 раза добавить щелкнул: Как изменить динамический QLabel с помощью Pixmap (QList)
и здесь после того, как я нажал его в третий раз, как вы можете видеть пиксельный в середине должны быть заменены на один без перекладины:
#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: Не удалось установить геометрию 89x172 + 915 + 454 на 'QLabelClassWindow' Результирующий геометрии:. 116x172 + 915 + 454 (рама: 8, 30, 8, 8). " Я предполагаю, что это так, потому что я просто изменяю значение в своем списке, а не в diplayed, но я не знаю, как правильно его закодировать. Спасибо за помощь.
Где вы удаляете предыдущую метку? Почему вы не используете макеты? Почему бы вам не создать одну метку и не изменить только картинку? И почему вы создаете две метки, когда 'counter> 1' ?? – Amartel
Я не снимаю превью. метка. Это звучит как проблема;). Я не использую макеты, потому что мне приходится размещать свои ярлыки рядом друг с другом, или я могу сделать это с помощью макетов? как изменить картину в ней, когда ее динамика? Я создаю второй ярлык, чтобы заменить его на до –
. Вы можете разместить виджет рядом друг с другом, установив [макетное расстояние] (http://doc.qt.io/qt-5.5/qlayout.html#spacing- prop) до нуля. 'setPixmap' меняет изображение, все, что вам нужно сделать, это сделать' QLabel' членом класса 'QMainWindow'. И я все еще не могу понять, зачем вам «label2» вместе с «label». Кроме того, если вам нужно объединить несколько изображений в одном, вы можете сделать это в классе 'QPixmap', используя' QPainter', не создавая несколько меток. – Amartel