Russian Qt Forum
Май 08, 2024, 22:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кнопка - иконка и подпись  (Прочитано 9087 раз)
rolan
Гость
« : Август 07, 2011, 11:53 »

Здравствуйте, всего неделю как начал изучать qt, что-то уже получается, что-то нет. Сейчас столкнулся с  проблемой - нужно создать кнопки по типу ярлыков на рабочем столе - иконка и подпись. Вчера с обеда до вечера просидел, много прочитал, перерыл поисковики, того, что нужно не нашел. Пробовал делать кнопку из pushbutton'а, toolbutton'а. Обработчики повесил, весь функционал получается, а вот если устанавливаю иконку - либо подпись исчезает (в toolbutton) либо текст справа от иконки отображается (pushbutton), css не помогает. Подскажите, как сделать прозрачную кнопку, чтобы сверху была заданная иконка, а внизу подпись. Спасибо
Записан
Kolobok
Гость
« Ответ #1 : Август 07, 2011, 15:03 »

QToolButton:setToolButtonStyle ( Qt::ToolButtonStyle style )
Записан
Globulus
Гость
« Ответ #2 : Август 07, 2011, 15:29 »

QSS

Код:
QToolButton {
    border:none ;
    background:none ;
    }

Код:
QToolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

вот как то так...
Записан
rolan
Гость
« Ответ #3 : Август 07, 2011, 18:46 »

Ага, спасибо. Разобрался - я ставил именно иконку:
...
button.setIcon(QtGui.QIcon(icon))
button.setIconSize(QtCore.QSize(32, 32))
...

Когда стал задавать

button.setStyleSheet("background: url('app.png') no-repeat top center")

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

button.connect(button, QtCore.SIGNAL("clicked()"), myapp, QtCore.SLOT(myapp.appStart(app)))

Кнопки создаются в цикле - так вот при таком объявлении сигнал срабатывает во время объявления: appstart пока выводит переданный параметр app, так вот после запуска приложения - я сразу вижу полный список всех параметров app, т.е. пока в цикле создавал кнопки и вешал обработчик - он вызывался. Ковырял и так и эдак, пришел к такому варианту:
в цикле создания кнопок вешаю обработчик так

button.clicked.connect(lambda: myapp.appStart(app))

Тут все вроде бы ничего, обработчик срабатывает во время нажатия на кнопку, НО вместо нужного значения app всегда передается последнее используемое в цикле. Догадываюсь, что слот принимает последнее значение app, потому что на момент запуска слота, app хранит в себе последнее используемое в цикле значение, но как решить проблему не могу понять. Запутанно написал, могу код привести

Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #4 : Август 07, 2011, 19:41 »

Коннект не правильно ставите.
У слота не могут быть аргументов, которых нет в сигнале.
Кавычек при clicked также не нужно.

Т.е. либо
connect(button, SIGNAL(clicked()), myapp, SLOT(appStart()));
appStart() - слот без параметров, а уже внутри него через sender() узнаёте, что за кнопка и какое приложение вызывать.

либо коннектить через QSignalMapper.
Записан
rolan
Гость
« Ответ #5 : Август 08, 2011, 09:58 »

Пробовал

connect(button, SIGNAL(clicked()), myapp, SLOT(appStart()))

ругается, что clicked() не определен, когда в кавычки заключаю - ругань исчезает.
Заработало вот так:

button.clicked.connect(lambda: self.appStart())

функцию appStart при этом перенес в myapp. appStart отрабатывает self.sender(), т.е. спокойно получаю из него objectName (в нем храню нужный параметр)
Раз работает, пусть работает, остался один вопрос - чем плох (если плох) мой вариант?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #6 : Август 08, 2011, 13:32 »

неплохо было б указать язык Улыбающийся питон?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
rolan
Гость
« Ответ #7 : Август 08, 2011, 13:59 »

Ахаха, ну да, питон. Я ж ведь форум нашел по связке "python qt форум", как то так, а вот сейчас смотрю russian qt forum, слова питон нет  Смеющийся Смеющийся Смеющийся балбес
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.487 секунд. Запросов: 23.