crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QPainter и множественное наследование
Dronte
  опции профиля:
сообщение 5.9.2011, 20:15
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 30.7.2011
Пользователь №: 2770

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




Репутация:   0  


class XoWidget : public QPushButton,QFrame


На XoWidget хочется нарисовать QPainterом:

    painter.begin(this);

‘QPaintDevice’ is an ambiguous base of ‘XoWidget’


Как нарисовать?

Да, сорри, первое - это код, а второе - это ошибка.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 5.9.2011, 20:55
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Нельзя использовать множественное наследование от классов наследников QObject!
А у тебя и QPushButton и QFrame наследники QObject.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dronte
  опции профиля:
сообщение 5.9.2011, 21:20
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 30.7.2011
Пользователь №: 2770

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




Репутация:   0  


Хорошо, а как иначе решить проблему?
Хочу, чтоб у виджета была рамка и сигнал pressed.
И рисовать на нем хочется..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hoRUS
  опции профиля:
сообщение 5.9.2011, 22:56
Сообщение #4


Студент
*

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

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




Репутация:   0  


Цитата(Dronte @ 5.9.2011, 22:20) *
чтоб у виджета была рамка и сигнал pressed.


Наследоваться от QFrame. Переопределить обработчики событий

void mousePressEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
void keyPressEvent(QKeyEvent*);
void keyReleaseEvent (QKeyEvent*);
и др.

Например, если нужно, чтоб сигнал генерировался именно при нажатии мыши, можно сделать примерно так:

class XoWidget : public QFrame
{
       Q_OBJECT

public:
       ...

protected:
       void mousePressEvent(QMouseEvent*);

signals:
       void pressed();
      
       ...

};

void XoWidget::mousePressEvent(QMouseEvent*)
{
       emit pressed();
}


Но у сигнала clicked() кнопки более сложное поведение, он генерируется при нажатии и отпускании кнопки, если курсор остается на кнопке (и в некоторых других случаях, например, при нажатии на пробел, когда кнопка в фокусе). Т.ч. переопределять придется много событий.
Как вариант, можно наследоваться от QPushButton и рисовать рамку руками QPainter'ом (все равно он используется). Выбирай, что проще и больше подходит.












Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dronte
  опции профиля:
сообщение 6.9.2011, 1:03
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 30.7.2011
Пользователь №: 2770

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




Репутация:   0  


Понятно, спасибо за разъяснения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 25.4.2024, 17:19