crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> кнопки-иконки
breeve
  опции профиля:
сообщение 2.2.2010, 14:02
Сообщение #1


Участник
**

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

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




Репутация:   1  


Как сделать иконку на которую можно нажать? сделал вот так:
icon = new QPushButton;
    icon->setFlat(true);
    QPixmap pix("lamp.png");
    icon->setIcon(pix);
    icon->setIconSize(pix.size());
    icon->setMask(pix.mask());

Но получается так что картинка немного глюченная, не прорисованная до конца как должна быть.. может есть какие-то другие варианты?
В дальнейшем планируется изменять цвет иконки при нажатии..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lucifer_vrn
  опции профиля:
сообщение 2.2.2010, 14:22
Сообщение #2


Студент
*

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

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




Репутация:   0  


breeve,
попробуй так:
    QToolButton *buttonOpen = new QToolButton;
    buttonOpen->setIcon(QIcon(":/tabbutton/images/open.png"));
    buttonOpen->setFixedSize(buttonOpen->iconSize());
    buttonOpen->setAutoRaise(true);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 2.2.2010, 14:51
Сообщение #3


Участник
**

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

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




Репутация:   1  


Цитата(lucifer_vrn @ 2.2.2010, 14:22) *
breeve,
попробуй так:
    QToolButton *buttonOpen = new QToolButton;
    buttonOpen->setIcon(QIcon(":/tabbutton/images/open.png"));
    buttonOpen->setFixedSize(buttonOpen->iconSize());
    buttonOpen->setAutoRaise(true);


Не получается что-то.. Иконка слишком маленькая и видны рамки кнопки.. Необходимо чтобы кнопку саму видно не было, а только иконку.. либо сделать кнопку в форме иконки.
В качестве примера - есть такие программы на linux - панельки с ярлычками(cairo-dock, awn). Нужно сделать что-то похожее..

Сообщение отредактировал breeve - 2.2.2010, 14:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lucifer_vrn
  опции профиля:
сообщение 2.2.2010, 15:16
Сообщение #4


Студент
*

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

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




Репутация:   0  


ну тогда создать класс унаследованный от QToolButton или QPushButton в нем переопределить paintEvent, оригинальный paintEvent не вызывать, а в нем с помощью QPainter::drawPixmap нарисовать иконку....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 2.2.2010, 16:00
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

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




Репутация:   9  


Цитата(breeve @ 2.2.2010, 14:51) *
Необходимо чтобы кнопку саму видно не было, а только иконку

Есть еще такой метод void QPushButton::setFlat( bool )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 2.2.2010, 17:56
Сообщение #6


Участник
**

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

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




Репутация:   1  


Цитата(MoPDoBoPoT @ 2.2.2010, 16:00) *
Есть еще такой метод void QPushButton::setFlat( bool )

Только вот в коде который я предоставил я этот метод использовал.. но все равно остается белая рамка. Как я понял все дело в setMask().

Сообщение отредактировал breeve - 2.2.2010, 17:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 2.2.2010, 18:17
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Думаю только может помочь что троли прописали. только style sheets
Кстати в примерах mainwindow есть пример с рисованием виджетов
там left.jpg, border.jpg как раз определяют style sheets. /название какое-то дерьмо у тролей 8) /

QPushButton {
border: 2px solid #8f8f91;
border-radius: 6px;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #f6f7fa, stop: 1 #dadbde);
min-width: 80px;
}

QPushButton:pressed {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #dadbde, stop: 1 #f6f7fa);
}

QPushButton:flat {
border: none; /* no border for a flat push button */
}

QPushButton:default {
border-color: navy; /* make the default button prominent */
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.2.2010, 18:54
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(JuryS1806 @ 2.2.2010, 21:17) *
style sheets. /название какое-то дерьмо у тролей
весь трёп на эту тему переехал сюда
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 5.2.2010, 11:08
Сообщение #9


Участник
**

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

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




Репутация:   1  


Наследовал класс от pushbutton и переопределил методы рисования, наведения, нажатия и отпускания. Вот код:
Раскрывающийся текст
PixButton::PixButton()//QString a): str(a)
{
    pix.load("earth.png");
    pixRect.setSize(pix.size());
    pixRect.moveTo(1,1);
}

void PixButton::paintEvent(QPaintEvent *event)
{
        QPainter painter(this);
        painter.drawPixmap(1,1,pix.width()-1,pix.height()-1,pix);
}

void PixButton::enterEvent(QEvent *event)
{
    pix.load("earth_move.png");
}

void PixButton::leaveEvent(QEvent *event)
{
    pix.load("earth.png");
}

void PixButton::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton){
        pix.load("earth_press.png");
        update();
    }
}

void PixButton::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->button() == Qt::NoButton){
        pix.load("earth_release.png");
        update();
    }
}
Все вроде бы работает, кроме отпускания клавиши. Как сделать правильно? я кликаю на кнопку и картинка нажатия задерживается пока я не уведу мышь с кнопки. И сама кнопка при этом не работает. Как правильно переопределить метод отпускания кнопки?

Сообщение отредактировал breeve - 10.2.2010, 16:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 10.2.2010, 16:32
Сообщение #10


Участник
**

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

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




Репутация:   1  


Как не пробую не получается...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 1.12.2024, 22:39