summaryrefslogtreecommitdiffstats
path: root/src/gui/doc/snippets/textdocument-tables/mainwindow.cpp
blob: 02f31f8807c6242f6f721fceea4f33185b698873 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
// Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause#include <QtWidgets>#include"mainwindow.h"MainWindow::MainWindow(){ QMenu *fileMenu =newQMenu(tr("&File")); QAction *saveAction = fileMenu->addAction(tr("&Save...")); saveAction->setShortcut(tr("Ctrl+S")); QAction *quitAction = fileMenu->addAction(tr("E&xit")); quitAction->setShortcut(tr("Ctrl+Q")); QMenu *showMenu =newQMenu(tr("&Show")); QAction *showTableAction = showMenu->addAction(tr("&Table"));menuBar()->addMenu(fileMenu);menuBar()->addMenu(showMenu); editor =newQTextEdit();//! [0] //! [1] QTextCursor cursor(editor->textCursor());//! [0] cursor.movePosition(QTextCursor::Start);//! [1]int rows =11;int columns =4;//! [2] QTextTableFormat tableFormat; tableFormat.setBackground(QColor("#e0e0e0")); QList<QTextLength> constraints; constraints <<QTextLength(QTextLength::PercentageLength,16); constraints <<QTextLength(QTextLength::PercentageLength,28); constraints <<QTextLength(QTextLength::PercentageLength,28); constraints <<QTextLength(QTextLength::PercentageLength,28); tableFormat.setColumnWidthConstraints(constraints);//! [3] QTextTable *table = cursor.insertTable(rows, columns, tableFormat);//! [2] //! [3]int column;int row; QTextTableCell cell; QTextCursor cellCursor; QTextCharFormat charFormat; charFormat.setForeground(Qt::black);//! [4] cell = table->cellAt(0,0); cellCursor = cell.firstCursorPosition(); cellCursor.insertText(tr("Week"), charFormat);//! [4]//! [5]for(column =1; column < columns; ++column) { cell = table->cellAt(0, column); cellCursor = cell.firstCursorPosition(); cellCursor.insertText(tr("Team %1").arg(column), charFormat);}for(row =1; row < rows; ++row) { cell = table->cellAt(row,0); cellCursor = cell.firstCursorPosition(); cellCursor.insertText(tr("%1").arg(row), charFormat);for(column =1; column < columns; ++column) {if((row-1) %3== column-1) {//! [5] //! [6] cell = table->cellAt(row, column); QTextCursor cellCursor = cell.firstCursorPosition(); cellCursor.insertText(tr("On duty"), charFormat);}//! [6] //! [7]}//! [7] //! [8]}//! [8]connect(saveAction, &QAction::triggered,this, &MainWindow::saveFile);connect(quitAction, &QAction::triggered,this, &MainWindow::close);connect(showTableAction, &QAction::triggered,this, &MainWindow::showTable);setCentralWidget(editor);setWindowTitle(tr("Text Document Tables"));}voidMainWindow::saveFile(){ QString fileName =QFileDialog::getSaveFileName(this,tr("Save document as:"),"",tr("XML (*.xml)"));if(!fileName.isEmpty()) {if(writeXml(fileName))setWindowTitle(fileName);elseQMessageBox::warning(this,tr("Warning"),tr("Failed to save the document."),QMessageBox::Cancel,QMessageBox::NoButton);}}voidMainWindow::showTable(){ QTextCursor cursor = editor->textCursor(); QTextTable *table = cursor.currentTable();if(!table)return; QTableWidget *tableWidget =newQTableWidget(table->rows(), table->columns());//! [9]for(int row =0; row < table->rows(); ++row) {for(int column =0; column < table->columns(); ++column) { QTextTableCell tableCell = table->cellAt(row, column);//! [9]QTextFrame::iterator it; QString text;for(it = tableCell.begin(); !(it.atEnd()); ++it) { QTextBlock childBlock = it.currentBlock();if(childBlock.isValid()) text += childBlock.text();} QTableWidgetItem *newItem =newQTableWidgetItem(text); tableWidget->setItem(row, column, newItem);/*//! [10] processTableCell(tableCell);//! [10] *///! [11]}//! [11] //! [12]}//! [12] tableWidget->setWindowTitle(tr("Table Contents")); tableWidget->show();}voidMainWindow::processFrame(QTextFrame *){}voidMainWindow::processBlock(QTextBlock){}voidMainWindow::processTable(QTextTable *table){ QTextFrame *frame = qobject_cast<QTextFrame *>(table);//! [13]QTextFrame::iterator it;for(it = frame->begin(); !(it.atEnd()); ++it) { QTextFrame *childFrame = it.currentFrame(); QTextBlock childBlock = it.currentBlock();if(childFrame) { QTextTable *childTable = qobject_cast<QTextTable*>(childFrame);if(childTable)processTable(childTable);elseprocessFrame(childFrame);}else if(childBlock.isValid()) {processBlock(childBlock);}}//! [13]}
close