Название: Кнопка - иконка и подпись Отправлено: rolan от Август 07, 2011, 11:53 Здравствуйте, всего неделю как начал изучать qt, что-то уже получается, что-то нет. Сейчас столкнулся с проблемой - нужно создать кнопки по типу ярлыков на рабочем столе - иконка и подпись. Вчера с обеда до вечера просидел, много прочитал, перерыл поисковики, того, что нужно не нашел. Пробовал делать кнопку из pushbutton'а, toolbutton'а. Обработчики повесил, весь функционал получается, а вот если устанавливаю иконку - либо подпись исчезает (в toolbutton) либо текст справа от иконки отображается (pushbutton), css не помогает. Подскажите, как сделать прозрачную кнопку, чтобы сверху была заданная иконка, а внизу подпись. Спасибо
Название: Re: Кнопка - иконка и подпись Отправлено: Kolobok от Август 07, 2011, 15:03 QToolButton:setToolButtonStyle ( Qt::ToolButtonStyle style )
Название: Re: Кнопка - иконка и подпись Отправлено: Globulus от Август 07, 2011, 15:29 QSS
Код: QToolButton { Код: QToolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); вот как то так... Название: Re: Кнопка - иконка и подпись Отправлено: rolan от Август 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 хранит в себе последнее используемое в цикле значение, но как решить проблему не могу понять. Запутанно написал, могу код привести Название: Re: Кнопка - иконка и подпись Отправлено: LisandreL от Август 07, 2011, 19:41 Коннект не правильно ставите.
У слота не могут быть аргументов, которых нет в сигнале. Кавычек при clicked также не нужно. Т.е. либо connect(button, SIGNAL(clicked()), myapp, SLOT(appStart())); appStart() - слот без параметров, а уже внутри него через sender() узнаёте, что за кнопка и какое приложение вызывать. либо коннектить через QSignalMapper. Название: Re: Кнопка - иконка и подпись Отправлено: rolan от Август 08, 2011, 09:58 Пробовал
connect(button, SIGNAL(clicked()), myapp, SLOT(appStart())) ругается, что clicked() не определен, когда в кавычки заключаю - ругань исчезает. Заработало вот так: button.clicked.connect(lambda: self.appStart()) функцию appStart при этом перенес в myapp. appStart отрабатывает self.sender(), т.е. спокойно получаю из него objectName (в нем храню нужный параметр) Раз работает, пусть работает, остался один вопрос - чем плох (если плох) мой вариант? Название: Re: Кнопка - иконка и подпись Отправлено: kambala от Август 08, 2011, 13:32 неплохо было б указать язык :) питон?
Название: Re: Кнопка - иконка и подпись Отправлено: rolan от Август 08, 2011, 13:59 Ахаха, ну да, питон. Я ж ведь форум нашел по связке "python qt форум", как то так, а вот сейчас смотрю russian qt forum, слова питон нет ;D ;D ;D балбес
|