Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2020, 11:47   #1
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию Странные иконки в программе при присвоении объекту QPicture в качестве QIcon.

Всем привет. Помогите мне с ошибкой.
uptool - QToolBar объект присвоенный главному окну. Если ему присвоить QIcon - рандомные картинки какие то показываются в качестве иконки...
crhby - копия (2).png
Код:
void ToolCore::isSelect() {
    uptool->clear();
    QPixmap icon(50, 50);
    QPainter paint(&icon);
    paint.setPen(QPen(*selectedColor1));
    paint.setBrush(QBrush(*selectedColor1));
    paint.drawRect(0, 10, 0, 40);
    uptool->addAction(QIcon(), "Размер пера", this, &ToolCore::uptool_selectResize);
    uptool->addAction(QIcon(icon), "Цвет(1)", this, &ToolCore::uptool_selectColor1);
    paint.setPen(QPen(*selectedColor2));
    paint.setBrush(QBrush(*selectedColor2));
    paint.drawRect(0, 10, 0, 40);
    uptool->addAction(QIcon(icon), "Цвет(2)", this, &ToolCore::uptool_selectColor2);
}
Мaкс вне форума Ответить с цитированием
Старый 18.03.2020, 12:06   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

QPixmap при addAction не копируется, а передаётся во владение именно этот объект
Поэтому нельзя использовать локальный объект - надо создавать динамически.
И свой для каждого пункта, Вы же сами видите на скрине - один и тот же рисунок в обоих пунктах
Black Fregat вне форума Ответить с цитированием
Старый 18.03.2020, 12:34   #3
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
QPixmap при addAction не копируется, а передаётся во владение именно этот объект
Поэтому нельзя использовать локальный объект - надо создавать динамически.
И свой для каждого пункта, Вы же сами видите на скрине - один и тот же рисунок в обоих пунктах
Я не очень понял. Вот так не работает...
Код:
uptool->clear();
    QPixmap *icon = new QPixmap(50, 50);
    QPainter paint(icon);
    paint.setPen(QPen(*selectedColor1));
    paint.setBrush(QBrush(*selectedColor1));
    paint.drawRect(0, 10, 0, 40);
    uptool->addAction(QIcon(), "Размер пера", this, &ToolCore::uptool_selectResize);
    uptool->addAction(QIcon(*icon), "Цвет(1)", this, &ToolCore::uptool_selectColor1);
    paint.setPen(QPen(*selectedColor2));
    paint.setBrush(QBrush(*selectedColor2));
    paint.drawRect(0, 10, 0, 40);
    uptool->addAction(QIcon(*icon), "Цвет(2)", this, &ToolCore::uptool_selectColor2);
Мaкс вне форума Ответить с цитированием
Старый 18.03.2020, 16:56   #4
Subst
Пользователь
 
Регистрация: 30.01.2020
Сообщений: 54
По умолчанию

что именно не работает?
Subst вне форума Ответить с цитированием
Старый 18.03.2020, 16:58   #5
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Subst Посмотреть сообщение
что именно не работает?
Имею в виду без отличия от начальной версии. Иконки всё же странные.
Мaкс вне форума Ответить с цитированием
Старый 18.03.2020, 17:34   #6
Subst
Пользователь
 
Регистрация: 30.01.2020
Сообщений: 54
По умолчанию

так у тебя одна иконка ж рисуется...

у тебя девайсом для рисования выступает все тот же pixmap
просто в какой-то момент ты его помещаешь на кнопку в тулбаре, а потом продолжаешь на нем рисовать
Subst вне форума Ответить с цитированием
Старый 18.03.2020, 17:39   #7
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Subst Посмотреть сообщение
так у тебя одна иконка ж рисуется...

у тебя девайсом для рисования выступает все тот же pixmap
просто в какой-то момент ты его помещаешь на кнопку в тулбаре, а потом продолжаешь на нем рисовать
Изменил. Та же фигня, только с одной иконкой
Мaкс вне форума Ответить с цитированием
Старый 18.03.2020, 17:45   #8
Subst
Пользователь
 
Регистрация: 30.01.2020
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Изменил. Та же фигня, только с одной иконко
т.е.?

ну смотри что ты делаешь..
QPainter paint(icon); - создал рисовальщика, обозначил ему холст и начал рисовать (вызвал begin)
end() будет вызван автоматически при уничтожении объекта, в твоем случае выходе из роутины твоей...
ты ж рисуешь на одном и том же холсте

где и что ты щас поменял то, обозначь?
Subst вне форума Ответить с цитированием
Старый 18.03.2020, 18:00   #9
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Subst Посмотреть сообщение
т.е.?

ну смотри что ты делаешь..
QPainter paint(icon); - создал рисовальщика, обозначил ему холст и начал рисовать (вызвал begin)
end() будет вызван автоматически при уничтожении объекта, в твоем случае выходе из роутины твоей...
ты ж рисуешь на одном и том же холсте

где и что ты щас поменял то, обозначь?
Код:
uptool->clear();
    QPixmap *icon = new QPixmap(50, 50);
    QPainter paint(icon);
    paint.setPen(QPen(*selectedColor1));
    paint.setBrush(QBrush(*selectedColor1));
    paint.drawRect(0, 10, 0, 40);
    paint.end();
    uptool->addAction(QIcon(), "Размер пера", this, &ToolCore::uptool_selectResize);
    uptool->addAction(QIcon(*icon), "Цвет(1)", this, &ToolCore::uptool_selectColor1);
Мaкс вне форума Ответить с цитированием
Старый 18.03.2020, 18:40   #10
Subst
Пользователь
 
Регистрация: 30.01.2020
Сообщений: 54
По умолчанию

QPixmap *icon = new QPixmap(50, 50);
QPainter paint(icon);
paint.fillRect(0,0,50,50,Qt::black) ;

QPen pen;
pen.setStyle(Qt::SolidLine);
pen.setColor(Qt::green);
pen.setWidth(1);
paint.setPen(pen);
//paint.setBrush(QBrush(Qt::red));
paint.drawRect(5,5, 40, 40);
paint.end();

toolBar->addAction(QIcon(), "Размер пера");
toolBar->addAction(QIcon(*icon), "Цвет(1)");
Subst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить несколько объектов в качестве аргументов и получить доступ к каждому объекту Illusiony PHP 3 18.04.2019 20:03
QPicture SAMOUCHKA Qt и кроссплатформенное программирование С/С++ 0 26.08.2016 05:13
Большие иконки иконки exe файла Сидоров Паскаль, Turbo Pascal, PascalABC.NET 12 02.10.2014 17:41
Две иконки в одной программе..? kta87 Общие вопросы Delphi 5 23.03.2012 08:52
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов Lanx Помощь студентам 0 06.04.2011 20:24