(Qt C++) QPushButton setIcon() не работает

Я работаю над проектом, в котором есть 40 проверяемых кнопок в группе, и я хочу, чтобы значок одной кнопки менялся в зависимости от значения, которое я определяю. Я не создаю новую кнопку, просто меняю значок текущей. Поэтому я тестирую его, пытаясь изменить значок одной кнопки.

Вот мой текущий код:

QPixmap b1d0(":/textures/blocks/textures/blocks/stone.png");

QIcon ButtonIcon(b1d0);
ui->slot_0->setIcon(ButtonIcon);
ui->slot_0->setIconSize(b1d0.rect().size());

Путь к ресурсу был скопирован непосредственно из моего файла ресурсов, поэтому он правильный, я возился с ним как сумасшедший, но без изменений, так что...

slot_0 — моя кнопка.

Что я сделал не так? Или, что еще лучше, можно ли вообще изменить значок существующей кнопки?

Спасибо за ваше время :)


person mrg95    schedule 14.07.2013    source источник
comment
Проверьте, возвращает ли b1d0.isNull() true. Если это так, то он не находит файл изображения или не может его прочитать.   -  person Guilherme Bernal    schedule 14.07.2013
comment
Интересный. Это правда, но я скопировал путь прямо из моего файла ресурсов? Я буду продолжать возиться с этим.   -  person mrg95    schedule 14.07.2013
comment
Поэтому я изменил путь к файлу изображения прямо на моем диске C:. Он остался нулевым. Как вы думаете, я не могу поместить png в растровое изображение или что-то в этом роде?   -  person mrg95    schedule 14.07.2013
comment
Попробуйте с другим файлом изображения. Также проверьте возврат QFile::exists("...").   -  person Guilherme Bernal    schedule 14.07.2013
comment
Итак, я переместил stone.png в каталог проекта, поэтому мне не нужны и \\ или /. Но потом мне интересно, что не так с моим путем к ресурсам?   -  person mrg95    schedule 14.07.2013
comment
Какой компилятор вы используете? В MSVC вам нужно будет добавить Q_INIT_RESOURCE(res); в начало main(), где res — это имя вашего файла .qrc (без .qrc). С GCC это просто работает.   -  person Alex Reinking    schedule 14.07.2013
comment
Я добавил это и изменил имя, но получаю ошибку ссылки?   -  person mrg95    schedule 14.07.2013
comment
Чтобы быть более точным: main.obj:-1: ошибка: LNK2019: неразрешенный внешний символ int __cdecl qInitResources_icons(void) (?qInitResources_icons@@YAHXZ), на который ссылается функция _main   -  person mrg95    schedule 14.07.2013
comment
Что ж, может быть, это поможет. Это полный пример кнопки, которая переключается между двумя значками при нажатии: gist.github.com/alexreinking/ 5992821   -  person Alex Reinking    schedule 14.07.2013
comment
Именно это я и сделал. Тьфу gyazo.com/7495233a747fad30e58ef4047ffda11b   -  person mrg95    schedule 14.07.2013
comment
Вы используете qmake для сборки всего? Если нет, то как вы связываете сгенерированные файлы из .qrc с вашим проектом? Это будет похоже на qrc_*.cpp.   -  person Alex Reinking    schedule 14.07.2013
comment
упс, мне просто нужно было все почистить, запустить qmake, потом пересобрать. Большое спасибо за помощь :)   -  person mrg95    schedule 14.07.2013


Ответы (1)


Если вы работаете в Windows, используя MSVC в качестве компилятора, и хотите использовать систему ресурсов Qt, вам нужно будет добавить

Q_INIT_RESOURCE(res)

в начало main(), где res — это имя вашего файла .qrc без «.qrc».

Чтобы получить полное представление об этом, посмотрите на эту суть:

https://gist.github.com/alexreinking/5992821

person Alex Reinking    schedule 14.07.2013