Russian Qt Forum
Ноябрь 26, 2024, 19:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: где лежит текст у виджетов?  (Прочитано 4387 раз)
malin
Гость
« : Декабрь 11, 2011, 23:02 »

Всем доброго времени суток. Возникла необходимость переопределить QPushButton::setText().
Прошу всех, кто знает, помочь найти, где в классе QPushButton лежит текст? Т.е., что происходит при вызове метода setText()?
Записан
andrew.k
Гость
« Ответ #1 : Декабрь 11, 2011, 23:05 »

А чего исходники не посмотреть?

QAbstractButton

Зачем такое извращение?
Записан
malin
Гость
« Ответ #2 : Декабрь 11, 2011, 23:49 »

Благодарю за исходники. А что такое d? Там используется d->text. В классе QPushButton нет поля d((
Мне требуется сделать кнопки с перевернутым текстом.(Не картинкой, а именно текстом). Вот мои попытки. До определенного момента все работает, однако иногда случается не то, что хочется.

Код:
#include <QtGui>

class InverseButton : public QPushButton
{
public:
    InverseButton(QWidget *parent = 0)
    : QPushButton(parent){}
  void paintEvent(QPaintEvent *pe)
  {
    QPushButton::paintEvent(pe);
    QPainter p(this);
    unsigned int len = fontMetrics().width(Text); //длина текста в пикселях
    unsigned int hei = fontMetrics().height(); //высота текста в пикселях
    drawRotatedText(&p, 180, (width()+len) / 2, (height()-hei) / 2, Text);
  }

  void setText(const QString &text){Text = text;}

  QString text(){return Text;}

  void drawRotatedText(QPainter *painter, float degrees, int x, int y, const QString &text)
  {
    painter->save();
    painter->translate(x, y);
    painter->rotate(degrees);
    painter->drawText(0, 0, text);
    painter->restore();
  }

private:
   QString Text;
};
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #3 : Декабрь 11, 2011, 23:58 »

Благодарю за исходники. А что такое d?
Что такое Pimpl по версии Qt, и с чем его едят!
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
thechicho
Гость
« Ответ #4 : Декабрь 12, 2011, 00:27 »

http://sadesign.ru/tools/flip/

Русский алфавит:

ʁ | |o | є | q | ıq | q | m | m | ц | х | ф | ʎ | ʟ | ɔ | d | о | н | w | v | ʞ | и | є | ж | ё | ǝ | 6 | L | ʚ | g | ɐ

Английский алфавит:

z | ʎ | x | ʍ | ʌ | n | ʇ | s | ɹ | d | o | u | l | ʞ | ɾ | ı | ƃ | ɟ | ǝ | ɔ | q | ɐ
Записан
malin
Гость
« Ответ #5 : Декабрь 12, 2011, 00:41 »

Что же так все сурово то... Не хотелось так глубоко влезать в это. Паттерны программирования.. Мда..
to thechicho: Спасибо, но цифры не переворачиваются
Записан
andrew.k
Гость
« Ответ #6 : Декабрь 12, 2011, 00:46 »

А чем тебя твое решение не устраивает?
Записан
popper
Гость
« Ответ #7 : Декабрь 12, 2011, 10:49 »

До определенного момента все работает, однако иногда случается не то, что хочется.

Код:
#include <QtGui>

class InverseButton : public QPushButton
{
  // ...
  void setText(const QString &text){Text = text;}

  QString text(){return Text;}
  // ...
private:
   QString Text;
};


Не знаю, как компилятор (или moc?) будет замещать методы QAbstractButton::text() и QAbstractButton::setText(), и что будет, если, например, доступ к объекту класса InverseButton будет через указатель QPushButton?
Рекомендую дать другие названия методам InverseButton::text() и InverseButton::setText().
Перед вызовом
Код:
drawRotatedText(&p, 180, (width()+len) / 2, (height()-hei) / 2, Text);
на всякий случай можно залить поле кнопки.
Записан
thechicho
Гость
« Ответ #8 : Декабрь 12, 2011, 11:01 »

http://www.cyberforum.ru/assembler/thread136959.html
 Смеющийся
Записан
andrew.k
Гость
« Ответ #9 : Декабрь 12, 2011, 11:26 »

До определенного момента все работает, однако иногда случается не то, что хочется.

Код:
#include <QtGui>

class InverseButton : public QPushButton
{
  // ...
  void setText(const QString &text){Text = text;}

  QString text(){return Text;}
  // ...
private:
   QString Text;
};


Не знаю, как компилятор (или moc?) будет замещать методы QAbstractButton::text() и QAbstractButton::setText(), и что будет, если, например, доступ к объекту класса InverseButton будет через указатель QPushButton?
Рекомендую дать другие названия методам InverseButton::text() и InverseButton::setText().
Нормально все будет. Согласно правилам ООП и с++.
оба метода невиртуальные. Поэтому какой смысл давать другие названия, все равно через указатель на QPushButton с ними работать не получится.
Разницы нет в общем, как называть.
Имхо в данном случае лучше все-таки сохранить название, замещая старую реализацию, чтобы не было путаницы.

А вообще очень странная необходимость возникла.
« Последнее редактирование: Декабрь 12, 2011, 11:28 от andrew.k » Записан
lighting
Гость
« Ответ #10 : Декабрь 12, 2011, 12:56 »

А перевернуть саму кнопку не вариант?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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