qt 6.5.1 original

This commit is contained in:
kleuter
2023-10-29 23:33:08 +01:00
parent 71d22ab6b0
commit 85d238dfda
21202 changed files with 5499099 additions and 0 deletions

View File

@ -0,0 +1,32 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtexttableborders Binary:
#####################################################################
qt_internal_add_manual_test(qtexttableborders
GUI
SOURCES
main.cpp
widget.cpp widget.h widget.ui
LIBRARIES
Qt::Gui
Qt::PrintSupport
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
# Resources:
set(resources_resource_files
"table-border-test-header.html"
"table-border-test.html"
)
qt_internal_add_resource(qtexttableborders "resources"
PREFIX
"/"
FILES
${resources_resource_files}
)

View File

@ -0,0 +1,14 @@
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}

View File

@ -0,0 +1,9 @@
#This project can be used to verify QTBUG-36152 case.
QT += core gui printsupport widgets
CONFIG += c++11
TARGET = qtexttableborders
TEMPLATE = app
SOURCES += main.cpp widget.cpp
HEADERS += widget.h
FORMS += widget.ui
RESOURCES += resources.qrc

View File

@ -0,0 +1,6 @@
<RCC>
<qresource prefix="/">
<file>table-border-test-header.html</file>
<file>table-border-test.html</file>
</qresource>
</RCC>

View 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>

View 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>

View File

@ -0,0 +1,100 @@
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#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.setOption(QAbstractPrintDialog::PrintSelection, true);
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
}

View File

@ -0,0 +1,31 @@
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#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

View 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>