crossplatform.ru

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

> Помогите с написанием собственного виджета., новичку
Dronte
  опции профиля:
сообщение 30.7.2011, 12:31
Сообщение #1


Студент
*

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

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




Репутация:   0  


Вобщем суть в том, что нужен виджет, который отображает + или - и изменяет то что он показывает по нажатию по нему мышкой.

Я попробовал создать наследника QLabel c переопределенным mousePressEvent, это работает, но выглядит ужасно, вокруг + или - огромное пустое пространство.

Как это исправить? Или лучше использовать другой способ создания виджета? Расскажите в подробностях, или дайте ссылку пожалуйста? Я недавно начал изучать Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Dronte
  опции профиля:
сообщение 31.7.2011, 12:16
Сообщение #2


Студент
*

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

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




Репутация:   0  


.h
Раскрывающийся текст

class AnswerWidget : public QLabel{
Q_OBJECT
public:
   AnswerWidget(QWidget * parent=0);
    void mousePressEvent(QMouseEvent * event);
    void block();
    void unblock();
    bool result();
    void setResult(bool);
private:
    bool blocked;
    bool textIsPlus;
};


.cpp
Раскрывающийся текст

AnswerWidget::AnswerWidget(QWidget * parent):QLabel(parent){
    setText("-");
    textIsPlus=0;
    blocked=0;
    show();
};

void AnswerWidget::mousePressEvent(QMouseEvent * ){
    if(!blocked){
    setResult(!textIsPlus);
    };
};

void AnswerWidget::block(){
    blocked=1;
};

void AnswerWidget::unblock(){
    blocked=0;
};
void AnswerWidget::setResult(bool result){
    if(result){
        setText("+");
        textIsPlus=1;
    }else{
        setText("-");
        textIsPlus=0;
    };
};

bool AnswerWidget::result(){
    return textIsPlus;
};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




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