crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Иконки на QToolBar-е все одинаковые :-(
JohnZ
  опции профиля:
сообщение 2.1.2017, 13:16
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 140
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Всех с НГ !!!

Какой-то непонятный трабл с созданием динамического QToolBar-a :-(
Все иконки почему-то одинаковые - по последней загруженной ...
Создаю его примерно так

  QPixmap pix;
  QByteArray ba;

    fileToolBar = addToolBar(tr("File"));

    cnt = nodeList.count();
    for (int i = 0;i < cnt;i++)
    {
        ti = nodeList.at(i).toElement();
        idd = ti.attribute(getTagByClass(42), "0").toInt(); // Action id
        ti = XmlHash.value(idd).toElement();    // Ищем Action в хеше
        tName = ti.attribute("name", "xxx");

       // Загрузка иконок

        ba  = MyLoadData(i);
        pix.loadFromData(ba);

//            icon = QIcon(pix);  
//            icon.addPixmap(pix);

        ba.clear();

//        action = new QAction(QIcon(pix), tName, this);
//        action->setIcon(QIcon(pix));
//        fileToolBar->addAction(action);

        action = fileToolBar->addAction(QIcon(pix), tName);
        action->setIcon(QIcon(pix));

        connect(action, SIGNAL(triggered(bool)), this, SLOT(onToolBarItem(bool)));
    }


То что в ремах, - это пробные варианты. Результат одинаков :-(
Проблема в том, что все иконки получаются одинаковыми, т. е. отображается
последняя загруженная из ресурса, но надпись при этом та что нужно.
В чём может быть проблема, подскажите плз ...

Сообщение отредактировал JohnZ - 2.1.2017, 15:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 3.1.2017, 14:27
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 140
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Перепробовал уже кучу вариантов - и ни в какую :-(
Из статического ресурса без проблем, как в примере ...
        action = new QAction(QIcon(":images/new.png"), tName, this);
        fileToolBar->addAction(action);


А вотЪ из дин-го ресурса - шиш ...

        action = fileToolBar->addAction(QIcon(pix), tName);


Нужен динамический ToolBar ! Кто в курсе, это глюк QT ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.1.2017, 14:47
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2920
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 202 раз(а)




Репутация:   35  


1) что возвращает pix.loadFromData(ba) ?
2) что возвращает функция MyLoadData ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 3.1.2017, 19:19
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 140
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 3.1.2017, 14:47) *
1) что возвращает pix.loadFromData(ba) ?

QPixmap pix;
pix.loadFromData(ba) - ничего не возвращает. Это загрузка QPixmap из QByteArray
Цитата
2) что возвращает функция MyLoadData ?

Дык QByteArray и возвращает, выдёргивает его из QDomElement и перекодирует в бинарник.

Перепробовал уже кучу вариантов, (c NEW и без него ) похоже на глюк либы :-(
Копание исходников либы не помогло :-(

Сообщение отредактировал JohnZ - 3.1.2017, 19:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 4.1.2017, 10:56
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2920
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 202 раз(а)




Репутация:   35  


1)
Цитата(Алексей1153 @ 3.1.2017, 16:47) *
pix.loadFromData(ba) - ничего не возвращает.


но ведь это же неправда. Возвращает значение типа bool

Цитата
bool QPixmap::loadFromData(const uchar *data, uint len, const char *format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor)




2)
Цитата
Дык QByteArray и возвращает, выдёргивает его из QDomElement и перекодирует в бинарник.


пробуй все вытащенные изображения вывести на независимый виджет, скажем QLabel. Видны ли изображения ?

------------------------
Пристегни минимальный проект, я опробую у себя проблему )

Сообщение отредактировал Алексей1153 - 4.1.2017, 10:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 4.1.2017, 11:24
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 140
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 4.1.2017, 10:56) *
1)
Цитата(Алексей1153 @ 3.1.2017, 16:47)
pix.loadFromData(ba) - ничего не возвращает.

но ведь это же неправда. Возвращает значение типа bool
bool QPixmap::loadFromData(const uchar *data, uint len, const char *format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor)

Иконка грузится из ресурса, и в данном случае без разницы что она возвращает, т.к. проверяется во время получения из ресурса.

Цитата(Алексей1153 @ 4.1.2017, 10:56) *
2)
Дык QByteArray и возвращает, выдёргивает его из QDomElement и перекодирует в бинарник.

пробуй все вытащенные изображения вывести на независимый виджет, скажем QLabel. Видны ли изображения ?

Пробовал - видны !
У меня было подозрение что QToolBar их ложит в хэш по имени, но увы ...

Цитата(Алексей1153 @ 4.1.2017, 10:56) *
------------------------
Пристегни минимальный проект, я опробую у себя проблему )

В принципе это можно опробовать и в любом QT-шном примере где есть тулбар.
Только иконки грузить из QByteArray как у меня в исходнике в первом сообщении.
Тот исходник и есть мин-й проект, только сделать загрузку в QByteArray.
Иконки в файле по р-ру одинаковые !!!

Сообщение отредактировал JohnZ - 4.1.2017, 12:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 4.1.2017, 17:29
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 907
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 141 раз(а)




Репутация:   9  


QPixmap implicitly shared, попробуй:
action = fileToolBar->addAction(QIcon(pix), tName);

заменить на:
action = fileToolBar->addAction(QIcon(pix.copy()), tName);

а это убери совсем:
action->setIcon(QIcon(pix));

http://doc-snapshots.qt.io/qt5-5.7/implicit-sharing.html
http://doc.qt.io/qt-5/qpixmap.html#copy

Сообщение отредактировал lanz - 4.1.2017, 17:30
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 4.1.2017, 20:55
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 140
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


С П А С И Б О !!! Заработало !!!
Lanz - с меня коньяк при встрече !!!
С П А С И Б О !!! С П А С И Б О !!! С П А С И Б О !!!

К Админу - В наименовании темы надо-бы поставить "РЕШЕНО"

Сообщение отредактировал JohnZ - 4.1.2017, 21:24
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.3.2017, 13:00