Вы должны перезаписать метод 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()
Включайте стандартный заголовок <iomanip>
и сойдите с ума. А именно, setw
манипулятор устанавливает выходную ширину. setfill
устанавливает заполняющийся символ.
std::cout << std::setiosflags(std::ios::fixed)
<< std::setprecision(3)
<< std::setw(18)
<< std::left
<< 12345.123;
Вы хотите использовать потоковые манипуляторы:
http://www.deitel.com/articles/cplusplus_tutorials/20060218/index.html
Можно также считать более дружественную функциональность обеспеченной одним из них:
Запись из памяти, но должна быть чем-то вдоль этих строк:
// 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, мобильность (и другая зависимость библиотеки), эффективность, поддержка интернационализации, безопасности типов, и т.д.