QTextDocument: add manual test for table border logic
This adds a manual test for the QTextTable border logic. Two HTML files are bundled as resources: table-border-test.html: Contains various test cases for the border logic. table-border-test-header.html: Contains a test case for printing a table with a repeated header. The test application allows: - editing - previewing - printing - opening the HTML in the system browser (via temp. file) It is possible to edit the HTML with "live preview" so new test cases can easily be implemented. Change-Id: Ic88488bc8b7dd74d5c03c3363f55840423462325 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This commit is contained in:
parent
c595878aa3
commit
9c891bead8
@ -35,6 +35,7 @@ qsslsocket \
|
||||
qsysinfo \
|
||||
qtabletevent \
|
||||
qtexteditlist \
|
||||
qtexttableborders \
|
||||
qtbug-8933 \
|
||||
qtbug-52641 \
|
||||
qtouchevent \
|
||||
|
39
tests/manual/qtexttableborders/main.cpp
Normal file
39
tests/manual/qtexttableborders/main.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "widget.h"
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
Widget w;
|
||||
w.show();
|
||||
|
||||
return a.exec();
|
||||
}
|
10
tests/manual/qtexttableborders/qtexttableborders.pro
Normal file
10
tests/manual/qtexttableborders/qtexttableborders.pro
Normal file
@ -0,0 +1,10 @@
|
||||
#This project can be used to verify QTBUG-36152 case.
|
||||
QT += core gui printsupport
|
||||
CONFIG += c++11
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
TARGET = qtexttableborders
|
||||
TEMPLATE = app
|
||||
SOURCES += main.cpp widget.cpp
|
||||
HEADERS += widget.h
|
||||
FORMS += widget.ui
|
||||
RESOURCES += resources.qrc
|
6
tests/manual/qtexttableborders/resources.qrc
Normal file
6
tests/manual/qtexttableborders/resources.qrc
Normal file
@ -0,0 +1,6 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>table-border-test-header.html</file>
|
||||
<file>table-border-test.html</file>
|
||||
</qresource>
|
||||
</RCC>
|
129
tests/manual/qtexttableborders/table-border-test-header.html
Normal file
129
tests/manual/qtexttableborders/table-border-test-header.html
Normal file
@ -0,0 +1,129 @@
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<h2>Printable table with repeated header</h2>
|
||||
|
||||
<p>
|
||||
Please print (to PDF, save the trees) this table and compare this to the
|
||||
print results of Chrome/Firefox.
|
||||
<ul>
|
||||
<li>Firefox fails to render the first repeated header correctly
|
||||
<li>Chrome fails to render the Cell B top edge (should be red, except the first row after header
|
||||
<li>Qt: Could do slightly better with the last row on each page (although both Firefox and Chrome don't work perfect here as well)
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<table border=1 bordercolor="#aaaaaa" style="border-collapse:collapse">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="border-bottom: 1px solid blue">Header A</th>
|
||||
<th style="border-bottom: 4px solid blue">Header B</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
<tr><td>Cell A</td><td style="border-top: 1px solid red">Cell B</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
171
tests/manual/qtexttableborders/table-border-test.html
Normal file
171
tests/manual/qtexttableborders/table-border-test.html
Normal file
@ -0,0 +1,171 @@
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<h1>Working Test Cases</h1>
|
||||
|
||||
<h2>border-collapse: separate</h2>
|
||||
|
||||
<h3>TC-A1: table no border</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td>Cell 1B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>TC-A2: table attribute controlled border (1px, red)</h3>
|
||||
<table border=1 bordercolor="red">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td>Cell 1B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>TC-A3: table attribute controlled border (4px, blue)</h3>
|
||||
<table border=4 bordercolor="blue">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td>Cell 1B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
Note: Real browsers render the inner cells border with 1px, but QTextDocument's rendering has always been like this.
|
||||
|
||||
<h2>border-collapse: collapse</h2>
|
||||
|
||||
<h3>TC-B1: table no border</h3>
|
||||
<table style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td>Cell 1B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>TC-B2: table attribute + css controlled grid (outer border 1px)</h3>
|
||||
<table border=1 bordercolor="red" style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td>Cell 1B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>TC-B3: table attribute + css controlled grid (outer border 4px)</h3>
|
||||
<table border=4 bordercolor="red" style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td>Cell 1B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>TC-B4: table attribute + css controlled grid (one cell with custom edge)</h3>
|
||||
<table border=4 bordercolor="red" style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td style="border-right: 8px solid green">Cell 1B (border-right: 8px solid green)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>TC-B5: table with single decorated cell</h3>
|
||||
<table style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td style="border: 2px solid red">Cell 1B (border: 2px solid red)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>cells with competing rules</h3>
|
||||
|
||||
<h4>TC-C1: vertical edge (pink, 6px) wins over horizontal edge (red|blue, 6px)</h4>
|
||||
<table border=1 bordercolor="#999999" style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="border-right: 4px solid green; border-bottom: 6px solid red">Cell 1A</td>
|
||||
<td style="border-left: 6px solid pink; border-bottom: 6px solid blue">Cell 2B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4>TC-C2: vertical edge (pink, 6px) loses over horizontal edge (red|blue, 8px)</h4>
|
||||
<table border=1 bordercolor="#999999" style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="border-right: 4px solid green; border-bottom: 8px solid red">Cell 1A</td>
|
||||
<td style="border-left: 6px solid pink; border-bottom: 8px solid blue">Cell 2B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4>TC-C3: cells with span and competing rules</h4>
|
||||
<table border=1 bordercolor="#999999" style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan=2 style="border-bottom: 4px solid red">Cell 1A/B spans over two columns (border-bottom: red)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-top: 1px solid green">Cell 2A (border-top loses -> red)</td>
|
||||
<td style="border-top: 10px solid green">Cell 2B (border-top wins -> green)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h1>Non-Working Test Cases</h1>
|
||||
|
||||
<h2>border-collapse: separate</h2>
|
||||
|
||||
<h3>TC-X1: table css border (red via style)</h3>
|
||||
<table style="border: 1px solid red">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Cell 1A</td>
|
||||
<td>Cell 1B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>border-collapse: collapse</h2>
|
||||
|
||||
<h3>TC-X2: tr css border</h3>
|
||||
<table border=1 style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr style="border-bottom: 2px solid red">
|
||||
<td>Cell 1A (border-bottom should be red)</td>
|
||||
<td>Cell 1B (border-bottom should be red)</td>
|
||||
</tr>
|
||||
<tr style="border-left: 2px solid red">
|
||||
<td>Cell 2A (border-left should be red)</td>
|
||||
<td>Cell 2B</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>TC-X3: cells with competing rules and colspan</h3>
|
||||
<table border=1 bordercolor="#999999" style="border-collapse: collapse">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan=2 style="border-bottom: 4px solid red; border-right: 15px solid pink">Cell 1A/B spans over two columns (border-bottom: red, border-right pink)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-top: 1px solid green">Cell 2A (border-top loses -> red)</td>
|
||||
<td style="border-top: 10px solid green">Cell 2B (border-top wins -> green)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
This is currently not 100% correct but admittedly a constructed corner case (and Chrome failes here, too).
|
||||
|
||||
</body>
|
||||
</html>
|
125
tests/manual/qtexttableborders/widget.cpp
Normal file
125
tests/manual/qtexttableborders/widget.cpp
Normal file
@ -0,0 +1,125 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "widget.h"
|
||||
#include "ui_widget.h"
|
||||
|
||||
#include <QScrollBar>
|
||||
#include <QFile>
|
||||
#include <QDir>
|
||||
#include <QTemporaryFile>
|
||||
|
||||
#ifndef QT_NO_DESKTOPSERVICES
|
||||
#include <QDesktopServices>
|
||||
#endif
|
||||
|
||||
#ifndef QT_NO_PRINTER
|
||||
#include <QPrinter>
|
||||
#include <QPrintDialog>
|
||||
#include <QPrintPreviewDialog>
|
||||
#endif
|
||||
|
||||
// This manual test allows checking the QTextTable border logic (QTBUG-36152)
|
||||
|
||||
Widget::Widget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::Widget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
resize(1400, 800);
|
||||
|
||||
connect(ui->docComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &Widget::onDocumentSelected);
|
||||
connect(ui->printButton, &QPushButton::clicked, this, &Widget::onPrint);
|
||||
connect(ui->previewButton, &QPushButton::clicked, this, &Widget::onPreview);
|
||||
connect(ui->openBrowserButton, &QPushButton::clicked, this, &Widget::onOpenBrowser);
|
||||
|
||||
connect(ui->sourceEdit, &QTextEdit::textChanged, this,
|
||||
[this]() {
|
||||
// make this a world class HTML IDE
|
||||
auto pos = ui->htmlEdit->verticalScrollBar()->value();
|
||||
ui->htmlEdit->setHtml(ui->sourceEdit->toPlainText());
|
||||
ui->htmlEdit->verticalScrollBar()->setValue(pos);
|
||||
});
|
||||
|
||||
ui->docComboBox->addItem(tr("Table Border Test"), ":/table-border-test.html");
|
||||
ui->docComboBox->addItem(tr("Table Border Header Test"), ":/table-border-test-header.html");
|
||||
|
||||
ui->docComboBox->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
Widget::~Widget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void Widget::onDocumentSelected()
|
||||
{
|
||||
QString url = ui->docComboBox->itemData(ui->docComboBox->currentIndex()).toString();
|
||||
QFile f(url);
|
||||
if (f.open(QFile::ReadOnly)) {
|
||||
ui->sourceEdit->setPlainText(QString::fromUtf8(f.readAll()));
|
||||
// preview HTML is set via textChanged signal
|
||||
}
|
||||
}
|
||||
|
||||
void Widget::onPrint()
|
||||
{
|
||||
#ifndef QT_NO_PRINTER
|
||||
QPrinter printer(QPrinter::HighResolution);
|
||||
QPrintDialog dlg(&printer, this);
|
||||
if (ui->htmlEdit->textCursor().hasSelection())
|
||||
dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
|
||||
dlg.setWindowTitle(tr("Print Document"));
|
||||
if (dlg.exec() == QDialog::Accepted) {
|
||||
ui->htmlEdit->print(&printer);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Widget::onPreview()
|
||||
{
|
||||
#ifndef QT_NO_PRINTER
|
||||
QPrinter printer(QPrinter::HighResolution);
|
||||
QPrintPreviewDialog preview(&printer, this);
|
||||
connect(&preview, &QPrintPreviewDialog::paintRequested, ui->htmlEdit, &QTextEdit::print);
|
||||
preview.exec();
|
||||
#endif
|
||||
}
|
||||
|
||||
void Widget::onOpenBrowser()
|
||||
{
|
||||
// write the current html to a temp file and open the system browser
|
||||
#ifndef QT_NO_DESKTOPSERVICES
|
||||
auto tf = new QTemporaryFile(QDir::tempPath() + "/XXXXXX.html", this);
|
||||
if (tf->open()) {
|
||||
tf->write(ui->sourceEdit->toPlainText().toUtf8());
|
||||
tf->close();
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(tf->fileName()));
|
||||
}
|
||||
#endif
|
||||
}
|
56
tests/manual/qtexttableborders/widget.h
Normal file
56
tests/manual/qtexttableborders/widget.h
Normal file
@ -0,0 +1,56 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef WIDGET_H
|
||||
#define WIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class Widget;
|
||||
}
|
||||
|
||||
class Widget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Widget(QWidget *parent = nullptr);
|
||||
~Widget();
|
||||
|
||||
private slots:
|
||||
void onDocumentSelected();
|
||||
void onPrint();
|
||||
void onPreview();
|
||||
void onOpenBrowser();
|
||||
|
||||
private:
|
||||
Ui::Widget *ui;
|
||||
};
|
||||
|
||||
#endif // WIDGET_H
|
79
tests/manual/qtexttableborders/widget.ui
Normal file
79
tests/manual/qtexttableborders/widget.ui
Normal file
@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Widget</class>
|
||||
<widget class="QWidget" name="Widget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>606</width>
|
||||
<height>522</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>QTextTable Border Manual Test</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QComboBox" name="docComboBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="printButton">
|
||||
<property name="text">
|
||||
<string>Print</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="previewButton">
|
||||
<property name="text">
|
||||
<string>Preview</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="openBrowserButton">
|
||||
<property name="text">
|
||||
<string>Open Browser</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QTextEdit" name="htmlEdit"/>
|
||||
<widget class="QTextEdit" name="sourceEdit"/>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<tabstops>
|
||||
<tabstop>docComboBox</tabstop>
|
||||
<tabstop>printButton</tabstop>
|
||||
<tabstop>previewButton</tabstop>
|
||||
<tabstop>openBrowserButton</tabstop>
|
||||
<tabstop>htmlEdit</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in New Issue
Block a user