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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: HTML на QPushButton  (Прочитано 22350 раз)
k06a
Гость
« Ответ #15 : Ноябрь 09, 2007, 23:37 »

Tam-Tam, всё из-за того што ты нажимаешь на QLabel, а не на QPushButton . . .

Символы юникода действительно нормально отображаются из QString.
А у меня так и не получается намутить на кнопке буковку с нижним индексом (произвольным) . . .
« Последнее редактирование: Ноябрь 09, 2007, 23:39 от k06a » Записан
k06a
Гость
« Ответ #16 : Ноябрь 10, 2007, 00:01 »

Всё-таки нужен HTML . . .
А у QLabel нет сигнала клика по ней . . . проблема . . .
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #17 : Ноябрь 10, 2007, 00:43 »

Всё-таки нужен HTML . . .
А у QLabel нет сигнала клика по ней . . . проблема . . .

Делаем тогда из QLabel кнопарь... Улыбающийся)
Наследуемся, выставляем параметры фрейма, чтобы лейбла была похожа на кнопку, реализовываем нужные сигналы и вперёд, юзаем полученый кнопарь Подмигивающий Я уже так когда-то делал
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
k06a
Гость
« Ответ #18 : Ноябрь 10, 2007, 15:57 »

реализовываем нужные сигналы и вперёд, юзаем полученый кнопарь Подмигивающий

С этого момента чуть подробнее . . . как их самому реализовать?
И хотелось бы потом добавить эллемент в группу Экшонов . . .
Записан
k06a
Гость
« Ответ #19 : Ноябрь 10, 2007, 16:23 »

Код:
class HTMLButton: public QLabel {
public:
HTMLButton(QString s):QLabel(s){
setFrameStyle(QFrame::Panel | QFrame::Raised);
setLineWidth(1);
}
};

А как сигналы назначить? У QFrame и QLabel их нет вообще . . .
Записан
Tam-Tam
Гость
« Ответ #20 : Ноябрь 10, 2007, 17:58 »

Tam-Tam, всё из-за того што ты нажимаешь на QLabel, а не на QPushButton . . .

Тогда почему при стандартном тексте все пашет нормально ?

А как сигналы назначить? У QFrame и QLabel их нет вообще . . .

Как по мне не слишком удачная мысль реализовывать элемент исходя из элемента с совсем другой функциональность. Поскольку на кнопке также можно писать текст, то проще будет наследовать от кнопки и встроить "понимание" HTML. Правда как это сделать я тоже пока плохо себе представляю Улыбающийся
Записан
Tam-Tam
Гость
« Ответ #21 : Ноябрь 10, 2007, 18:00 »

Всё-таки нужен HTML . . .
А у QLabel нет сигнала клика по ней . . . проблема . . .

Всегда есть перехват событий.
Записан
k06a
Гость
« Ответ #22 : Ноябрь 10, 2007, 18:49 »

Вот так вот всё нормально пашет)) На кнопке(эл-т очень на неё похожий) действительно работает HTML . . . Теперь на кнопках и интегралы и нижние индексы и степени и т.д.

Код:
class HTMLButton: public QLabel, public QEvent {
public:
HTMLButton(QString name):
   QLabel(name),
           QEvent(MouseButtonPress)
{
  setAlignment(Qt::AlignCenter);
  setFrameStyle(QFrame::Panel | QFrame::Raised);
  setLineWidth(2); setMidLineWidth(2);
  setFixedSize(48,32);
}
protected:
void mousePressEvent(QMouseEvent *ev){
setFrameStyle(QFrame::Panel | QFrame::Sunken);
QLabel *lab = new QLabel("[Qt]");
                lab->show();
}
void mouseReleaseEvent(QMouseEvent *ev){
setFrameStyle(QFrame::Panel | QFrame::Raised);
}
};
Записан
k06a
Гость
« Ответ #23 : Ноябрь 10, 2007, 19:56 »

Tam-Tam, всё из-за того што ты нажимаешь на QLabel, а не на QPushButton . . .
Тогда почему при стандартном тексте все пашет нормально ?

А ты попробуй нажимать не в QLabel - тобишь в уголки и края кнопок, глюков нет))))
Ну стандартный то он стандартный, а не впихнутый насильно)
« Последнее редактирование: Ноябрь 10, 2007, 19:58 от k06a » Записан
k06a
Гость
« Ответ #24 : Ноябрь 10, 2007, 20:05 »

Такой вопрос теперь.

setFrameStyle(QFrame::StyledPanel | QFrame::Raised); - очертаний кнопки не видно.
setFrameStyle(QFrame::Panel | QFrame::Raised); - а так видно.

Почему? Хотелось бы StyledPanel . . .
Но её не видно ни при каких параметрах толщинны бордюра . . .
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #25 : Ноябрь 10, 2007, 23:47 »

Если честно, то получилась какае-то кривоватая реализация HTMLButton Улыбающийся

Можно было сделать примерно так:

Код:
class HTMLButton: public QLabel {
    Q_OBJECT
public:
    HTMLButton(QWidget *parent = 0) : QLabel(parent) {
        setAlignment(Qt::AlignCenter);
        setFrameStyle(QFrame::Panel | QFrame::Raised);
        resize(75, 24);
    }

protected:
    virtual void mousePressEvent (QMouseEvent *event) {
        setFrameStyle(QFrame::Panel | QFrame::Sunken);
        emit pressed();
    }

    virtual void mouseReleaseEvent (QMouseEvent * event) {
        setFrameStyle(QFrame::Panel | QFrame::Raised);
        emit released();
        emit clicked();
    }

signals:
    void clicked();
    void pressed();
    void released();
};

Далее используем как обычную кнопку:

Код:
HTMLButton *btn = new HTMLButton(this);
connect(btn, SIGNAL(clicked()), this, SLOT(someslot()));

Впринципе класс можно наворотить дальше.

ЗЫ: не пинаёте больно, если кое-что забыл Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #26 : Ноябрь 10, 2007, 23:49 »

Всегда есть перехват событий.

А какая проблема создать эти сигналы? Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
k06a
Гость
« Ответ #27 : Ноябрь 11, 2007, 01:17 »

Спасибо! Так конешно красивее код. Просто не знал как сигнал вызывать . . .
В книге об этом молчат вроде . . .
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #28 : Ноябрь 11, 2007, 01:49 »

Могу предложить вот такой код:

Код:
class HTMLButton: public QPushButton {
    Q_OBJECT
public:
    HTMLButton(QWidget *parent = 0) : QPushButton(parent) {
        init();
    }

HTMLButton(const QString &text, QWidget *parent = 0) : QPushButton(text, parent) {
        init();
    }

protected:
virtual void paintEvent ( QPaintEvent *event )  {
QPainter painter(this);
QStyleOptionButton styleOps;
styleOps.initFrom(this);
styleOps.state = isDown() ? QStyle::State_Sunken : QStyle::State_Raised;
if (isDefault())
styleOps.features |= QStyleOptionButton::DefaultButton;
style()->drawControl(QStyle::CE_PushButton, &styleOps, &painter, this);

QAbstractTextDocumentLayout::PaintContext ctx;
ctx.palette = palette();
                       doc->setHtml(text());
doc->documentLayout()->draw(&painter, ctx);
}

private:
void init() {
doc = new QTextDocument(this);
}

private:
QTextDocument *doc;
};

имхо он лучше. Только вам прийдётся самому отцентровать текст в кнопке. Я подал идею, далее сами Улыбающийся
« Последнее редактирование: Ноябрь 11, 2007, 01:51 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
k06a
Гость
« Ответ #29 : Ноябрь 11, 2007, 13:19 »

Такой вопрос теперь.
setFrameStyle(QFrame::StyledPanel | QFrame::Raised); - очертаний кнопки не видно.
setFrameStyle(QFrame::Panel | QFrame::Raised); - а так видно.
Почему? Хотелось бы StyledPanel . . .
Но её не видно ни при каких параметрах толщинны бордюра . . .

Почему StyledPanel не хочет отображаться??? Просто нет никакой кнопки, только HTML
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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