Увеличить размер шрифта кнопки при изменении размера кнопки

#qt #resize #fullscreen

#qt #изменение размера #полноэкранный режим

Вопрос:

У меня есть приложение Qt с главным окном, в котором пять кнопок выровнены по вертикали. Все они имеют одинаковый размер.

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

Есть предложения?

Лучшие,

guitarflow

Ответ №1:

Я не могу придумать никакого способа сделать это в конструкторе, но на самом деле это не слишком много кода. Вот быстрое и беспроблемное подтверждение концепции. Вы хотели бы учитывать поля (используя QStyle::pixelMetrics и тому подобное), Но вы поняли идею.

 #include <QtGui>

class FontAdjustingButton : public QPushButton {
public:
  explicit FontAdjustingButton(QWidget *parent = NULL) : QPushButton(parent) {
    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  }
protected:
  void resizeEvent(QResizeEvent *event) {
    int button_margin = style()->pixelMetric(QStyle::PM_ButtonMargin);
    QFont f = font();
    f.setPixelSize(event->size().height() - button_margin * 2);
    setFont(f);
  }
};

int main(int argc, char **argv) {
  QApplication app(argc, argv);
  QWidget w;
  QVBoxLayout *layout = new QVBoxLayout;
  for (int i = 0; i < 5;   i) {
    FontAdjustingButton *btn = new FontAdjustingButton;
    btn->setText(QString("Hello, world %1").arg(i));
    layout->addWidget(btn);
  }
  w.setLayout(layout);
  w.show();
  return app.exec();
}
  

Комментарии:

1. Хорошо, я понял это. Отлично работает!! Если вы раньше не разбирались во всей этой верстке, не могли бы вы, пожалуйста, сказать мне, что вы подразумеваете под QStyle :: pixelMetrics? Интересно углубиться в это немного больше.

2. Я отредактировал код, чтобы учесть поля кнопки. Класс QStyle позволяет получать подсказки о том, что выглядит «правильно» для каждой платформы. Обычно вы используете его методы, чтобы помочь вам рисовать элементы графического интерфейса. ( doc.qt.nokia.com/stable/qstyle.html )

3. Большое вам спасибо! Выглядит хорошо! Хотел бы дать вам преимущество, но, к сожалению, у меня недостаточно репутации, чтобы сделать это!! Сделаю это, как только смогу. С наилучшими пожеланиями!!

4. Могу ли я каким-то образом увидеть, насколько широк текст метки на самом деле? Мне нужно, чтобы метки кнопок были идеально выровнены, и я хотел бы использовать ширину самого широкого текста метки, чтобы рассчитать, сколько отступов влево я должен использовать для всех пяти кнопок. Еще раз спасибо!

5. На самом деле, если вы не возражаете, опубликуйте это как отдельный вопрос. Это (а) сделает его более заметным, чтобы вы получили больше ответов, и (б) сделает его более доступным для обнаружения на случай, если у кого-то еще возникнут какие-то вопросы позже.