Сервировка с помощью станд.:: суд

Вы должны перезаписать метод paintCell(), так как этот метод вызывается в paintEvent ():

class CalendarWidget(QCalendarWidget):
    def paintCell(self, painter, rect, date):
        super(CalendarWidget, self).paintCell(painter, rect, date)
        if date == self.selectedDate():
            painter.save()
            f = QFont()
            f.setPixelSize(10)
            f.setBold(True)
            f.setItalic(True)
            painter.setFont(f)
            r = rect
            painter.drawText(
                rect.topLeft() + QPoint(10, 33),
                "{}/{}".format("tset1", "test2"),
            )
            painter.restore()


class main_window(QWidget):
    def __init__(self):
        super(main_window, self).__init__()
        self.resize(1280, 900)
        self.Calendar()

    def Calendar(self):
        self.cal = CalendarWidget(self)
        self.cal.resize(500, 500)

Обновление:

Если вы чтобы текст оставался, вы должны сохранить дату и перекрасить при необходимости, так как Qt перерисовывает все

class CalendarWidget(QCalendarWidget):
    def __init__(self, parent=None):
        super(CalendarWidget, self).__init__(parent)
        self._selected_dates = set()
        self._selected_dates.add(self.selectedDate())
        self.clicked.connect(self.on_clicked)

    @pyqtSlot(QDate)
    def on_clicked(self, date):
        self._selected_dates.add(date)

    def paintCell(self, painter, rect, date):
        super(CalendarWidget, self).paintCell(painter, rect, date)
        if date in self._selected_dates:
            painter.save()
            f = QFont()
            f.setPixelSize(10)
            f.setBold(True)
            f.setItalic(True)
            painter.setFont(f)
            r = rect
            painter.drawText(
                rect.topLeft() + QPoint(10, 33),
                "{}/{}".format("tset1", "test2"),
            )
            painter.restore()
12
задан Anonymous 26 February 2009 в 13:58
поделиться

4 ответа

Включайте стандартный заголовок <iomanip> и сойдите с ума. А именно, setw манипулятор устанавливает выходную ширину. setfill устанавливает заполняющийся символ.

17
ответ дан 2 December 2019 в 03:14
поделиться
std::cout << std::setiosflags(std::ios::fixed)
          << std::setprecision(3)
          << std::setw(18)
          << std::left
          << 12345.123;
15
ответ дан 2 December 2019 в 03:14
поделиться

Вы хотите использовать потоковые манипуляторы:

http://www.deitel.com/articles/cplusplus_tutorials/20060218/index.html

5
ответ дан 2 December 2019 в 03:14
поделиться

Можно также считать более дружественную функциональность обеспеченной одним из них:

  • Повышение. Формат (мощный, но очень тяжелый, больше времени и выделений памяти, чем другой упомянутый)
  • Loki. SafeFormat
  • FastFormat (относительно новая, но сверкающая быстрая библиотека, также безопасная с точки зрения типов в отличие от других)

Запись из памяти, но должна быть чем-то вдоль этих строк:

// Dumb streams:
printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345);

// For IOStreams you've got example in the other answers

// Boost Format supports various flavours of formatting, for example:
std::cout << boost::format("%-14.3f%-14.3f\n") % a % b;
std::cout << boost::format("%1$-14.3f%2$-14.3f\n") % a % b;
// To gain somewhat on the performance you can store the formatters:
const boost::format foo("%1$-14.3f%2$-14.3f\n");
std::cout << boost::format(foo) % a % b;

// For the Loki::Printf it's also similar:
Loki::Printf("%-14.3f%-14.3f\n")(a)(b);

// And finally FastFormat.Format (don't know the syntax for decimal places)
fastformat::fmtln(std::cout, "{0,14,,<}{1,14,,>}", a, b);

Кроме того, если Вы планируете придерживаться какой-либо из этих библиотек форматирования, исследуйте полностью их ограничения в контексте expressibility, мобильность (и другая зависимость библиотеки), эффективность, поддержка интернационализации, безопасности типов, и т.д.

11
ответ дан 2 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: