Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [qt (html)] разношрифтный текст на кнопке


Автор: gordmiand 22.3.2010, 20:03
Привет!
Хочу вывести текст различным шрифтом:
На Label вроде все получается верно:
Код

label->setText("<p style='font-family:\"MS Shell Dlg 2\"'>Hello - <span style='font-family:\"Symbol\"'>a"); 


а почему на кнопку такая команда не работает верно? – выводится просто строка символов, указанных в setText, а не надпись “Hello а (то есть альфа)”??? 
как мне вывести текст на кнопку разным шрифтом? 

Автор: gordmiand 23.3.2010, 14:18
Пробовал так:

Код

button->setText("  ");

label1=new QLabel(button);
label1->setText(" <p style='font-family:\"MS Shell Dlg 2\"'>Hello- <span style='font- 
                                        family:\"Symbol\"'>a  ");
label1->setGeometry(25,2,25,20);



не лучший, конечно, вариант, но на правду похоже…. Но как же тогда щелкать на эту кнопку, если щелкая по кнопке можно щелкнуть по этому лейблу и соот-но ничего не произойдет…как быть? Ведь у лейбла нет сигнала онклик…или можно иным способом вывести текст разными шрифтами на кнопку? Подскажииииите….

Автор: borisbn 23.3.2010, 14:25
Цитата(gordmiand @  23.3.2010,  14:18 Найти цитируемый пост)
Ведь у лейбла нет сигнала онклик

можно наследоваться от QLabel, переписать http://qt.nokia.com/doc/4.6/qwidget.html#mousePressEvent

честно говоря не лучшее решение, но лучше ничего в голову не лезет.
Буду вместе с Вами ждать ответа, т.к. тоже хочу кнопку с html-текстом

Автор: gordmiand 23.3.2010, 14:32
вот задачка...ну почему так сделано, что в Label можно выводить разношрифтный текст (и использовать хтмл в принципе), а в эдит или кнопку - нет...
тогда подскажите пример на переопределение этого самого mousePressEvent (если нельзя сделать это как-то более грамотно)....

Автор: borisbn 23.3.2010, 15:34
Цитата(gordmiand @  23.3.2010,  14:32 Найти цитируемый пост)
а в эдит или кнопку - нет...

в едит можно, а на кнопку нельзя, потому, что отображением текста на кнопке занимается не Qt, а ОС

Код

class ClickableLabel : public QLabel
{
Q_OBJECT

public:
    ClickableLabel( QObject * parent = 0 )
        : QLabel( parent )
    {
    }
protected:
    void mousePressEvent( QMouseEvent * event )
    {
        QLabel::mousePressEvent( event );
        emit clicked();
    }
signals:
    void clicked();
};

...
button->setText("  ");

label1=new ClickableLabel( button );
label1->setText(" <p style='font-family:\"MS Shell Dlg 2\"'>Hello- <span style='font- 
                                        family:\"Symbol\"'>a  ");
label1->setGeometry(25,2,25,20);

connect( label1, SIGNAL( clicked() ), SLOT( имя слота ) );


Автор: SABROG 23.3.2010, 18:52
Обсуждалось на другом форуме: http://www.prog.org.ru/topic_6457_0.html

Цитата(borisbn @  23.3.2010,  15:34 Найти цитируемый пост)
потому, что отображением текста на кнопке занимается не Qt, а ОС

Qt, но для кнопок используется более быстрая и легковесная техника нежели для QLabel. Скорее всего при обилии таких HTML кнопок приложение будет дико тормозить.

Цитата(gordmiand @  23.3.2010,  14:18 Найти цитируемый пост)
Ведь у лейбла нет сигнала онклик…

Как один из вариантов:

Код

QMessageBox* msgBox = new QMessageBox(this);
    msgBox->setText("Clicked!");

    QStateMachine* machine = new QStateMachine(this);
    QState* s1 = new QState(machine);
    QMouseEventTransition* mouseTrans =
            new QMouseEventTransition(ui->label, QEvent::MouseButtonRelease, Qt::LeftButton, s1);
    QObject::connect(mouseTrans, SIGNAL(triggered()), msgBox, SLOT(exec()));
    machine->setInitialState(s1);
    machine->start();

Автор: gordmiand 23.3.2010, 20:56
мда...если так все сложно с выводом греческих символов на кнопку, то сделаю как сам хотел - вывод лейбла на кнопку + как SABROG посоветовал - обработчик онклик для лейбла... smile  

+ подскажите пож-та юникоды для символов "альфа" и "бетта"... 

Автор: SABROG 23.3.2010, 21:16
α - 0x03B1
β - 0x03B2

Автор: gordmiand 23.3.2010, 21:26
спасибо за юникоды....неужели нельзя все-таки сделать как-то проще? что же такая проблема с этими греческими буквами на кнопке..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)