void Editor::print() { #ifndef QT_NO_PRINTER if ( printer.setup(this) ) { // opens printer dialog printer.setFullPage(TRUE); // we'll set our own margins QPainter p; p.begin( &printer ); // paint on printer p.setFont( e->font() ); QFontMetrics fm = p.fontMetrics(); QPaintDeviceMetrics metrics( &printer ); // need width/height // of printer surface const int MARGIN = metrics.logicalDpiX() / 2; // half-inch margin int yPos = MARGIN; // y position for each line for( int i = 0 ; i < e->numLines() ; i++ ) { if ( printer.aborted() ) break; if ( yPos + fm.lineSpacing() > metrics.height() - MARGIN ) { // no more room on this page if ( !printer.newPage() ) // start new page break; // some error yPos = MARGIN; // back to top of page } p.drawText( MARGIN, yPos, metrics.width() - 2*MARGIN, fm.lineSpacing(), ExpandTabs, e->textLine( i ) ); yPos += fm.lineSpacing(); } p.end(); // send job to printer } #endif }
void QConsolePrivate::updateConsoleSize (bool sync) { QFontMetrics fm (m_consoleView->font()); QSize winSize = m_consoleView->size (); m_charSize.rwidth () = fm.averageCharWidth(); m_charSize.rheight () = fm.lineSpacing (); m_consoleRect.setWidth (int(double(winSize.width ()) / double(fm.averageCharWidth()))); m_consoleRect.setHeight (int(double(winSize.height ()) / double(fm.lineSpacing ()))); m_bufferSize.rwidth () = m_consoleRect.width (); m_bufferSize.rheight () = qMax (m_bufferSize.height (), m_consoleRect.height ()); m_consoleRect.moveLeft (0); if (m_consoleRect.bottom () >= m_bufferSize.height ()) m_consoleRect.moveTop (m_bufferSize.height () - m_consoleRect.height ()); log ("Console resized:\n"); log (" widget size: %d x %d\n", winSize.width (), winSize.height ()); log (" buffer size: %d x %d\n", m_bufferSize.width (), m_bufferSize.height ()); log (" window: (%d, %d) -> (%d, %d) [%d x %d]\n", m_consoleRect.left (), m_consoleRect.top (), m_consoleRect.right (), m_consoleRect.bottom (), m_consoleRect.width (), m_consoleRect.height ()); if (sync) syncConsoleParameters (); updateScrollBar (); }
void StringConfig::updateItem(int r, int item) { QFontMetrics fm = parent->fontMetrics(); int y = r * fm.lineSpacing(); int tw=0; QString s; int i=0; for (; !(s=text(r,i)).isNull(); ++i) { int w = fm.width(s); tw += w; } bool spread = spreadRow(r) && width2() > tw; int xw = spread ? (width2()-tw)/(i-1) : 3; int x = spread ? (width2()-tw-xw*(i-1))/2 : 2; i=0; for (; !(s=text(r,i)).isNull(); ++i) { int w = fm.width(s)+xw; if ( i == item ) { parent->update(QRect(x-xw/2,y+1+fm.descent(),w,fm.lineSpacing())); return; } x += w; } }
void Editor::print() { const int MARGIN = 10; if ( printer.setup(this) ) { // opens printer dialog QPainter p; p.begin( &printer ); // paint on printer p.setFont( e->font() ); int yPos = 0; // y position for each line QFontMetrics fm = p.fontMetrics(); QPaintDeviceMetrics metrics( &printer ); // need width/height // of printer surface for( int i = 0 ; i < e->numLines() ; i++ ) { if ( MARGIN + yPos > metrics.height() - MARGIN ) { printer.newPage(); // no more room on this page yPos = 0; // back to top of page } p.drawText( MARGIN, MARGIN + yPos, metrics.width(), fm.lineSpacing(), ExpandTabs | DontClip, e->textLine( i ) ); yPos = yPos + fm.lineSpacing(); } p.end(); // send job to printer } }
void StringConfig::draw(QPainter* p) { QFontMetrics fm = p->fontMetrics(); for (int r=0; r<nrows; r++) { p->translate(0,fm.lineSpacing()); p->setPen(rowColor(r)); int tw=0; QString s; int i=0; for (; !(s=text(r,i)).isNull(); ++i) { int w = fm.width(s); tw += w; } bool spread = spreadRow(r);// && parent->width() > tw; int xw = spread ? (width2()-tw)/(i-1) : 3; int x = spread ? (width2()-tw-xw*(i-1))/2 : 2; i=0; for (; !(s=text(r,i)).isNull(); ++i) { int w = fm.width(s)+xw; if ( highlight(r,i) ) { p->fillRect(x-xw/2,1+fm.descent()-fm.lineSpacing(),w,fm.lineSpacing(),Qt::black); p->setPen(Qt::white); }else{ p->setPen(Qt::black); } p->drawText(x,-fm.descent()-1,s); x += w; } } }
void DevLineNumber::paintEvent(QPaintEvent *e) { const QPixmap pm[] ={ QPixmap(":/break.png"), QPixmap(":/error.png") }; int n = 1, contentsY = editor->verticalScrollBar()->value(); qreal pageBottom = contentsY + editor->viewport()->height(); const QFontMetrics fm( editor->document()->defaultFont() ); QPainter p(this); for (QTextBlock block = editor->document()->begin(); block.isValid(); block = block.next(), ++n ) { QTextLayout *layout = block.layout(); const QRectF boundingRect = layout->boundingRect(); QPointF position = layout->position(); if (position.y() + boundingRect.height() < contentsY) continue; if (position.y() > pageBottom) break; int posY = qRound(position.y()); BlockData *dat = BlockData::data(block); const QString txt = QString::number(n); p.drawText( 0, posY - contentsY, width(), fm.lineSpacing(), Qt::AlignRight | Qt::AlignVCenter, txt); if ( !dat ) continue; int x = 0; if ( dat->s & BlockData::BreakPoint ) p.drawPixmap( 15*(x++), posY - contentsY +(fm.lineSpacing() - (*pm).height())/2, (*pm).width(), (*pm).height(), *pm); if ( dat->s & BlockData::Error ) p.drawPixmap( 15*(x++), posY - contentsY +(fm.lineSpacing() - pm[1].height())/2, pm[1].width(), pm[1].height(), pm[1]); } }
/** @todo elide texts */ void ibanBicItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); // Background QStyle *style = opt.widget ? opt.widget->style() : QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); const int margin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1; const QRect textArea = QRect(opt.rect.x() + margin, opt.rect.y() + margin, opt.rect.width() - 2 * margin, opt.rect.height() - 2 * margin); // Do not paint text if the edit widget is shown const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(opt.widget); if (view && view->indexWidget(index)) return; // Get data payeeIdentifierTyped<payeeIdentifiers::ibanBic> ibanBic = ibanBicByIndex(index); // Paint Bic painter->save(); const QFont smallFont = painter->font(); const QFontMetrics metrics(opt.font); const QFontMetrics smallMetrics(smallFont); const QRect bicRect = style->alignedRect((opt.direction == Qt::RightToLeft) ? Qt::LeftToRight : Qt::RightToLeft, Qt::AlignTop, QSize(textArea.width(), smallMetrics.lineSpacing()), QRect(textArea.left(), metrics.lineSpacing() + textArea.top(), textArea.width(), smallMetrics.lineSpacing()) ); painter->setFont(smallFont); style->drawItemText(painter, bicRect, Qt::AlignBottom | Qt::AlignRight, QApplication::palette(), true, ibanBic->storedBic(), opt.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); // Paint Bank name painter->save(); const QRect nameRect = style->alignedRect(opt.direction, Qt::AlignTop, QSize(textArea.width(), smallMetrics.lineSpacing()), QRect(textArea.left(), metrics.lineSpacing() + textArea.top(), textArea.width(), smallMetrics.lineSpacing()) ); style->drawItemText(painter, nameRect, Qt::AlignBottom, QApplication::palette(), true, ibanBic->institutionName(), opt.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); // Paint IBAN painter->save(); QFont normal = painter->font(); normal.setBold(true); painter->setFont(normal); const QRect ibanRect = style->alignedRect(opt.direction, Qt::AlignTop, QSize(textArea.width(), metrics.lineSpacing()), textArea); const QString bic = index.model()->data(index, Qt::DisplayRole).toString(); style->drawItemText(painter, ibanRect, Qt::AlignTop, QApplication::palette(), true, ibanBic->paperformatIban(), opt.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); // Paint type painter->save(); QRect typeRect = style->alignedRect(opt.direction, Qt::AlignTop | Qt::AlignRight, QSize(textArea.width() / 5, metrics.lineSpacing()), textArea); style->drawItemText(painter, typeRect, Qt::AlignTop | Qt::AlignRight, QApplication::palette(), true, i18n("IBAN & BIC"), opt.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text); painter->restore(); }
void PickboardConfig::updateRows(int from, int to) { if ( from != to ) { // (all) parent->update(); } else { QFontMetrics fm = parent->fontMetrics(); parent->update(QRect(0,1+fm.descent() + from * fm.lineSpacing(), width2(), fm.lineSpacing())); } }
//----------------------------------------------------------------------------- //! Update the graphic configuration for the current data //----------------------------------------------------------------------------- void tHeelCorrectionGraphicWidget::UpdateConfig() { // Save enough space to the left of the graph to write the boat speed values on the axis QFontMetrics fm = QFontMetrics(m_AxisLabelFont); QRect boundingRect = fm.boundingRect( QString( tr("Correction") ) ); m_LeftMarginWidth = boundingRect.width() + 10; m_TopMarginHeight = fm.lineSpacing() / 2; m_BottomMarginHeight = fm.lineSpacing() / 2; m_GraphicHeight = this->rect().height() - m_TopMarginHeight - m_BottomMarginHeight; m_GraphicWidth = this->rect().width() - m_LeftMarginWidth - m_cRightMarginWidth; }
IntSize RenderThemeQt::sizeForFont(RenderStyle* style) const { const QFontMetrics fm(style->font().font()); QSize size(0, 0); switch (style->appearance()) { case CheckboxAppearance: { break; } case RadioAppearance: { break; } case PushButtonAppearance: case ButtonAppearance: { QSize sz = fm.size(Qt::TextShowMnemonic, QString::fromLatin1("X")); QStyleOptionButton opt; sz = QApplication::style()->sizeFromContents(QStyle::CT_PushButton, &opt, sz, 0); size.setHeight(sz.height()); break; } case MenulistAppearance: { QSize sz; sz.setHeight(qMax(fm.lineSpacing(), 14) + 2); QStyleOptionComboBox opt; sz = QApplication::style()->sizeFromContents(QStyle::CT_ComboBox, &opt, sz, 0); size.setHeight(sz.height()); break; } case TextFieldAppearance: { const int verticalMargin = 1; const int horizontalMargin = 2; int h = qMax(fm.lineSpacing(), 14) + 2*verticalMargin; int w = fm.width(QLatin1Char('x')) * 17 + 2*horizontalMargin; QStyleOptionFrameV2 opt; opt.lineWidth = QApplication::style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &opt, 0); QSize sz = QApplication::style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(w, h).expandedTo(QApplication::globalStrut()), 0); size.setHeight(sz.height()); break; } default: break; } return size; }
void AlbumWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.fillRect(rect(), Qt::black); if (m_pixmap.isNull()) { painter.setPen(Qt::white); painter.drawText(rect(), Qt::AlignCenter, tr("Downloading cover, please wait...")); return; } painter.drawPixmap(0, 0, m_pixmap); Song* actualSong = MediaApp::getInstance()->getPlaylistInstance()->getActual(); if (actualSong != NULL) { m_nowPlaying = QString::fromStdString(actualSong->getTitle()); } else { m_nowPlaying = tr("ThePlayer"); } QFontMetrics metrics = painter.fontMetrics(); int textWidth = metrics.width(m_nowPlaying); painter.setPen(Qt::NoPen); painter.setBrush(QColor(0, 0, 0, 127)); painter.drawRect((width() - textWidth) / 2 - 5, 0, textWidth + 10, metrics.lineSpacing() + 5); painter.setPen(Qt::white); painter.drawText((width() - textWidth) / 2, metrics.leading() + metrics.ascent() + 2, m_nowPlaying); }
int QDockWidgetLayout::titleHeight() const { QDockWidget *q = qobject_cast<QDockWidget*>(parentWidget()); if (QWidget *title = widget(TitleBar)) return perp(verticalTitleBar, title->sizeHint()); QSize closeSize(0, 0); QSize floatSize(0, 0); if (QLayoutItem *item = item_list[CloseButton]) closeSize = item->widget()->sizeHint(); if (QLayoutItem *item = item_list[FloatButton]) floatSize = item->widget()->sizeHint(); int buttonHeight = qMax(perp(verticalTitleBar, closeSize), perp(verticalTitleBar, floatSize)); QFontMetrics titleFontMetrics = q->fontMetrics(); #ifdef Q_WS_MAC if (qobject_cast<QMacStyle *>(q->style())) { extern QHash<QByteArray, QFont> *qt_app_fonts_hash(); // qapplication.cpp QFont font = qt_app_fonts_hash()->value("QToolButton", q->font()); titleFontMetrics = QFontMetrics(font); } #endif int mw = q->style()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, 0, q); return qMax(buttonHeight + 2, titleFontMetrics.lineSpacing() + 2*mw); }
void printerStream::printText(const QString &txt, bool newLine) { if (fwbdebug) { qDebug("printText -------"); qDebug("pageBody.height(): %d", pageBody.height()); qDebug("yPos: %d", yPos); } if (txt.isEmpty()) return; if (printer->printerState() == QPrinter::Aborted) return; pr.setFont( bodyFont ); QFontMetrics fm = pr.fontMetrics(); QRect br = fm.boundingRect(txt); if (getYSpace()<br.height()) { flushPage(); beginPage(); // resets yPos } if (pageNo>=fromPage && pageNo<=toPage) { pr.setPen(Qt::black); pr.drawText( xmargin, yPos, printer->width()-2*xmargin, br.height(), Qt::TextExpandTabs | Qt::TextDontClip, txt ); } int nlines=1; int i=-1; while ( (i=txt.indexOf("\n",i+1))>=0 ) nlines++; if (newLine) yPos = yPos + nlines*fm.lineSpacing(); }
void SubListBoxItem::paint(QPainter *p) { QFontMetrics fm = p->fontMetrics(); int begin = fm.ascent(); if ( _subtitle->getProblem() ) { p->setPen( Qt::red ); } p->drawText( 3, begin, _subtitle->getTiming() ); std::vector<Subline> v = _subtitle->getSubs(); std::vector<Subline>::const_iterator it; QFont f0 = p->font(); for ( it = v.begin(); it != v.end(); it++ ) { begin += fm.lineSpacing(); if ( it->getFmt() == Subline::Italic ) { QFont f = p->font(); f.setItalic( true ); p->setFont( f ); } else if ( it->getFmt() == Subline::Bold ) { QFont f = p->font(); f.setBold( true ); p->setFont( f ); } p->drawText( 3, begin, it->getLine() ); p->setFont( f0 ); } }
void FluidWidget::paintEvent(QPaintEvent * /* event */) { QPainter painter(this); //painter.fillRect(rect(), Qt::black); if (pixmap.isNull()) { painter.setPen(Qt::white); painter.drawText(rect(), Qt::AlignCenter, tr("Rendering initial image, please wait...")); return; } painter.drawPixmap(0, 0, pixmap); QString text = tr("Use mouse wheel or the '+' and '-' keys to zoom. " "Press and hold left mouse button to scroll."); QFontMetrics metrics = painter.fontMetrics(); int textWidth = metrics.width(text); painter.setPen(Qt::NoPen); painter.setBrush(QColor(0, 0, 0, 127)); painter.drawRect((width() - textWidth) / 2 - 5, 0, textWidth + 10, metrics.lineSpacing() + 5); painter.setPen(Qt::white); painter.drawText((width() - textWidth) / 2, metrics.leading() + metrics.ascent(), text); }
AboutDialog::AboutDialog(QWidget* parent, const QString & text, const int & width, const int & heigth): QDialog(parent), textEdit(NULL), mainLayout(NULL) { this->setModal(true); this->mainLayout = new QVBoxLayout(this); this->mainLayout->setSizeConstraint(QLayout::SetFixedSize); this->textEdit = new QTextEdit(this); QPalette Palette; Palette.setBrush(QPalette::Base, QBrush(QPixmap((const char**)copasi_beta_background_xpm))); textEdit->setPalette(Palette); QFontMetrics FontMetrics = this->fontMetrics(); int w = width * (FontMetrics.width('W') + FontMetrics.width('I')) / 2; int h = heigth * FontMetrics.lineSpacing(); this->textEdit->setFixedSize(w, h); this->textEdit->setReadOnly(true); this->textEdit->setText(text); // this->textEdit->setText(QString(text).arg(); this->mainLayout->addWidget(this->textEdit); QDialogButtonBox* box = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, this); this->mainLayout->addWidget(box); connect(box, SIGNAL(rejected()), this, SLOT(closeButton_clicked())); }
TreeItemEditDialog::TreeItemEditDialog(IconsRepository * iconsRepo, QWidget *parent) : QDialog(parent) { _nameEdit = new QLineEdit(this); _descriptionEdit = new QPlainTextEdit(this); QFontMetrics m (_descriptionEdit->font()) ; int rowHeight = m.lineSpacing() ; _descriptionEdit->setMaximumHeight(4 * rowHeight) ; _descriptionEdit->setTabChangesFocus(true); _iconCombo = new QComboBox(this); _iconCombo->setModel(iconsRepo->model(this)); _defaultIconId = iconsRepo->getDefaultIcon(); QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); buttonBox->button(QDialogButtonBox::Ok)->setDefault(true); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); _formLayout = new QFormLayout; _formLayout->addRow(tr("Name:"),_nameEdit); _formLayout->addRow(tr("Description:"),_descriptionEdit); _formLayout->addRow(tr("Icon:"), _iconCombo); QVBoxLayout * mainLayout = new QVBoxLayout; mainLayout->addLayout(_formLayout); mainLayout->addStretch(); mainLayout->addWidget(buttonBox); setLayout(mainLayout); }
QSize KoDockWidgetTitleBar::sizeHint() const { QDockWidget *q = qobject_cast<QDockWidget*>(parentWidget()); int mw = q->style()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, 0, q); int fw = q->style()->pixelMetric(QStyle::PM_DockWidgetFrameWidth, 0, q); // get size of buttons... QSize closeSize(0, 0); if (d->closeButton) { closeSize = d->closeButton->sizeHint(); } QSize floatSize(0, 0); if (d->floatButton) { floatSize = d->floatButton->sizeHint(); } QSize hideSize(0, 0); if (d->collapseButton) { hideSize = d->collapseButton->sizeHint(); } int buttonHeight = qMax(qMax(closeSize.height(), floatSize.height()), hideSize.height()) + 2; int buttonWidth = closeSize.width() + floatSize.width() + hideSize.width(); // get font size QFontMetrics titleFontMetrics = q->fontMetrics(); int fontHeight = titleFontMetrics.lineSpacing() + 2 * mw; int height = qMax(buttonHeight, fontHeight); return QSize(buttonWidth + height + 4*mw + 2*fw, height); }
PartCategoryDialog::PartCategoryDialog(QAbstractItemModel *model, QWidget *parent) : QDialog(parent) { _nameEdit = new QLineEdit(this); _descriptionEdit = new QPlainTextEdit(this); QFontMetrics m (_descriptionEdit->font()) ; int RowHeight = m.lineSpacing() ; _descriptionEdit->setMaximumHeight(4 * RowHeight) ; QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); buttonBox->button(QDialogButtonBox::Ok)->setDefault(true); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); _formLayout = new QFormLayout; _formLayout->addRow(tr("Name:"),_nameEdit); _formLayout->addRow(tr("Description:"),_descriptionEdit); QVBoxLayout * mainLayout = new QVBoxLayout; mainLayout->addLayout(_formLayout); mainLayout->addStretch(); mainLayout->addWidget(buttonBox); setLayout(mainLayout); _widgetMapper = new QDataWidgetMapper(this); _widgetMapper->setModel(model); _widgetMapper->addMapping(_nameEdit, 0); _widgetMapper->addMapping(_descriptionEdit, 1); _widgetMapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); //qDebug("Spacing %d", _formLayout->verticalSpacing()); }
void TrackView::updateFont(const QFontMetrics &fontMetrics) { rowHeight = fontMetrics.lineSpacing(); trackWidth = fontMetrics.width('0') * 16; topMarginHeight = rowHeight + 4; leftMarginWidth = fontMetrics.width('0') * 8; }
QSize Editor::sizeHint() const { ensurePolished(); const QFontMetrics metrics = fontMetrics(); const int width = metrics.width('x') * 10; const int height = metrics.lineSpacing() + 6; return QSize(width, height); }
QString CustomLabel::elidedText() const { QString elided = text(); QStringList srcLines; QStringList dstLines; QRectF lr = contentsRect(); int textWidth = lr.width(); // eliding text // TODO: move to text change / resize event handler, make elided a member if (elideMode() != Qt::ElideNone) { QFontMetrics fm = fontMetrics(); if (!wordWrap()) { // single line elide elided = fm.elidedText(text(), elideMode(), textWidth); } else if (elideMode() == Qt::ElideRight) { // multiline elide srcLines = elided.split("\n"); int pxPerLine = fm.lineSpacing(); int lines = lr.height() / pxPerLine + 1; foreach (QString srcLine, srcLines) { int w = fm.width(srcLine); if (w >= textWidth) { QStringList tmpList = srcLine.split(' '); QString s; int i = 0; while (i < tmpList.count()) { if (fm.width(s + " " + tmpList.at(i)) >= textWidth) { if (!s.isEmpty()) { dstLines += s; s = QString::null; } } if (!s.isEmpty()) { s += " "; } s += tmpList.at(i); i++; } dstLines += s; } else { dstLines += srcLine; } }
void ProcessWidget::print(QPrinter *printer, const QString &filePath){ QPainter printPainter; const int height = printer->height(); const int width = printer->width(); const int Margin = 20; int yPos = 0; // y-position for each line printPainter.begin(printer); QRect textRec = QRect(printPainter.viewport().left() + 5 ,printPainter.viewport().height() - 20,printPainter.viewport().width() - 5,20); QFont f("Helvetica",8); printPainter.setFont(f); QFontMetrics fontMetrics = printPainter.fontMetrics(); for(int i = 0; i< count(); i++){ // no more room on the current page if(Margin + yPos > height - Margin) { printPainter.setPen(Qt::black); printPainter.drawText(Margin,Margin + yPos + fontMetrics.lineSpacing(),width,fontMetrics.lineSpacing(), Qt::AlignLeft | Qt::AlignVCenter,tr("File: %1").arg(filePath)); printer->newPage(); yPos = 0; // back to top of page } //Draw text ProcessListBoxItem* boxItem = static_cast<ProcessListBoxItem*>(item(i)); printPainter.setPen(boxItem->color()); printPainter.drawText(Margin,Margin + yPos, width,fontMetrics.lineSpacing(), Qt::TextExpandTabs | Qt::TextDontClip, boxItem->text()); yPos = yPos + fontMetrics.lineSpacing(); } //Print the name of the file printPainter.resetMatrix(); printPainter.setPen(Qt::black); printPainter.drawText(textRec,Qt::AlignLeft | Qt::AlignVCenter,tr("File: %1").arg(filePath)); printPainter.end(); }
//========================================================================= // DebuggerMemView //========================================================================= void DebuggerMemView::mousePressEvent(QMouseEvent* event) { const bool leftClick = event->button() == Qt::LeftButton; const bool rightClick = event->button() == Qt::RightButton; if (leftClick || rightClick) { QFontMetrics actualFont = fontMetrics(); const double fontWidth = actualFont.width(QString(100, '_')) / 100.; const int fontHeight = std::max(1, actualFont.lineSpacing()); debug_view_xy topLeft = view()->visible_position(); debug_view_xy clickViewPosition; clickViewPosition.x = topLeft.x + (event->x() / fontWidth); clickViewPosition.y = topLeft.y + (event->y() / fontHeight); if (leftClick) { view()->process_click(DCK_LEFT_CLICK, clickViewPosition); } else if (rightClick) { // Display the last known PC to write to this memory location & copy it onto the clipboard debug_view_memory* memView = downcast<debug_view_memory*>(view()); const offs_t address = memView->addressAtCursorPosition(clickViewPosition); const debug_view_memory_source* source = downcast<const debug_view_memory_source*>(memView->source()); address_space* addressSpace = source->space(); const int nativeDataWidth = addressSpace->data_width() / 8; const uint64_t memValue = source->device()->machine().debugger().cpu().read_memory(*addressSpace, addressSpace->address_to_byte(address), nativeDataWidth, true); const offs_t pc = source->device()->debug()->track_mem_pc_from_space_address_data(addressSpace->spacenum(), address, memValue); if (pc != (offs_t)(-1)) { // TODO: You can specify a box that the tooltip stays alive within - might be good? const QString addressAndPc = QString("Address %1 written at PC=%2").arg(address, 2, 16).arg(pc, 2, 16); QToolTip::showText(QCursor::pos(), addressAndPc, nullptr); // Copy the PC into the clipboard as well QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(QString("%1").arg(pc, 2, 16)); } else { QToolTip::showText(QCursor::pos(), "UNKNOWN PC", nullptr); } } viewport()->update(); update(); } }
QSize Editor::sizeHint() const { constPolish(); QFontMetrics fm = fontMetrics(); int h = QMAX(fm.lineSpacing(), 14); int w = fm.width( 'x' ) * 20; int m = frameWidth() * 2; return( style().sizeFromContents(QStyle::CT_LineEdit, this, QSize( w + m, h + m + 4 ). expandedTo(QApplication::globalStrut()))); }
int printerStream::getTextHeight(const QString &txt) { if (txt.isEmpty()) return 0; if (printer->printerState() == QPrinter::Aborted) return 0; pr.setFont( bodyFont ); QFontMetrics fm = pr.fontMetrics(); int nlines=1; int i=-1; while ( (i=txt.indexOf("\n",i+1))>=0 ) nlines++; return nlines*fm.lineSpacing(); }
//! [2] void MandelbrotWidget::paintEvent(QPaintEvent * /* event */) { QPainter painter(this); painter.fillRect(rect(), Qt::black); if (pixmap.isNull()) { painter.setPen(Qt::white); painter.drawText(rect(), Qt::AlignCenter, tr("Rendering initial image, please wait...")); //! [2] //! [3] return; //! [3] //! [4] } //! [4] //! [5] if (curScale == pixmapScale) { //! [5] //! [6] painter.drawPixmap(pixmapOffset, pixmap); //! [6] //! [7] } else { //! [7] //! [8] double scaleFactor = pixmapScale / curScale; int newWidth = int(pixmap.width() * scaleFactor); int newHeight = int(pixmap.height() * scaleFactor); int newX = pixmapOffset.x() + (pixmap.width() - newWidth) / 2; int newY = pixmapOffset.y() + (pixmap.height() - newHeight) / 2; painter.save(); painter.translate(newX, newY); painter.scale(scaleFactor, scaleFactor); QRectF exposed = painter.matrix().inverted().mapRect(rect()).adjusted(-1, -1, 1, 1); painter.drawPixmap(exposed, pixmap, exposed); painter.restore(); } //! [8] //! [9] #if !defined(Q_WS_S60) && !defined(Q_WS_MAEMO_5) && !defined(Q_WS_SIMULATOR) QString text = tr("Use mouse wheel or the '+' and '-' keys to zoom. " "Press and hold left mouse button to scroll."); QFontMetrics metrics = painter.fontMetrics(); int textWidth = metrics.width(text); painter.setPen(Qt::NoPen); painter.setBrush(QColor(0, 0, 0, 127)); painter.drawRect((width() - textWidth) / 2 - 5, 0, textWidth + 10, metrics.lineSpacing() + 5); painter.setPen(Qt::white); painter.drawText((width() - textWidth) / 2, metrics.leading() + metrics.ascent(), text); #endif }
void kernelinfo::print() { // ###### Rewrite to use QSimpleRichText to print here as well const int Margin = 10; int pageNo = 1; if ( printer->setup(this) ) { // printer dialog statusBar()->message( tr("Printing...") ); QPainter p; if( !p.begin( printer ) ) // paint on printer return; p.setFont( e->font() ); int yPos = 0; // y-position for each line QFontMetrics fm = p.fontMetrics(); QPaintDeviceMetrics metrics( printer ); // need width/height // of printer surface for( int i = 0 ; i < e->lines() ; i++ ) { if ( Margin + yPos > metrics.height() - Margin ) { QString msg( "Printing (page " ); msg += QString::number( ++pageNo ); msg += ")..."; statusBar()->message( msg ); printer->newPage(); // no more room on this page yPos = 0; // back to top of page } p.drawText( Margin, Margin + yPos, metrics.width(), fm.lineSpacing(), ExpandTabs | DontClip, e->text( i ) ); yPos = yPos + fm.lineSpacing(); } p.end(); // send job to printer statusBar()->message( tr("Printing completed"), 2000 ); } else { statusBar()->message( tr("Printing aborted"), 2000 ); } }
void MDIWindow::print( QPrinter* printer) { #ifndef QT_NO_PRINTER const int Margin = 10; int pageNo = 1; if ( printer->setup(this) ) { // printer dialog emit message( "Printing...", 0 ); QPainter p; if ( !p.begin( printer ) ) return; // paint on printer p.setFont( medit->font() ); int yPos = 0; // y position for each line QFontMetrics fm = p.fontMetrics(); QPaintDeviceMetrics metrics( printer ); // need width/height // of printer surface for( int i = 0 ; i < medit->numLines() ; i++ ) { if ( Margin + yPos > metrics.height() - Margin ) { QString msg( "Printing (page " ); msg += QString::number( ++pageNo ); msg += ")..."; emit message( msg, 0 ); printer->newPage(); // no more room on this page yPos = 0; // back to top of page } p.drawText( Margin, Margin + yPos, metrics.width(), fm.lineSpacing(), ExpandTabs | DontClip, medit->textLine( i ) ); yPos = yPos + fm.lineSpacing(); } p.end(); // send job to printer emit message( "Printing completed", 2000 ); } else { emit message( "Printing aborted", 2000 ); } #endif }
QSize SqueezedComboBox::sizeHint() const { ensurePolished(); QFontMetrics fm = fontMetrics(); int maxW = count() ? 18 : 7 * fm.width(QChar('x')) + 18; int maxH = qMax(fm.lineSpacing(), 14) + 2; QStyleOptionComboBox options; options.initFrom(this); return style()->sizeFromContents(QStyle::CT_ComboBox, &options, QSize(maxW, maxH), this).expandedTo(QApplication::globalStrut()); }