Merge remote-tracking branch 'origin/5.14' into 5.15

Conflicts:
	.qmake.conf
	examples/widgets/widgets/imageviewer/imageviewer.cpp
	src/corelib/text/qchar.cpp
	src/corelib/time/qdatetime.cpp

Change-Id: I9762f5c4ff650799219729d6aee79ac07ce9024a
This commit is contained in:
Qt Forward Merge Bot 2020-02-04 01:00:59 +01:00 committed by Edward Welbourne
commit 97417e8f28
86 changed files with 573 additions and 271 deletions

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
@ -198,7 +198,7 @@ private slots:
public slots:
void request(const QString &flightCode, const QDate &date) {
void request(const QString &flightCode, QDate date) {
setWindowTitle("Loading...");

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
@ -71,7 +71,7 @@ QVariant addGenre(QSqlQuery &q, const QString &name)
return q.lastInsertId();
}
QVariant addAuthor(QSqlQuery &q, const QString &name, const QDate &birthdate)
QVariant addAuthor(QSqlQuery &q, const QString &name, QDate birthdate)
{
q.addBindValue(name);
q.addBindValue(birthdate);

View File

@ -27,6 +27,7 @@
/*!
\example hellovulkancubes
\meta installpath vulkan
\title Hello Vulkan Cubes Example
\ingroup examples-vulkan
\brief Shows the basics of using QVulkanWindow.

View File

@ -27,6 +27,7 @@
/*!
\example hellovulkantexture
\meta installpath vulkan
\ingroup examples-vulkan
\title Hello Vulkan Texture Vulkan Example
\brief Shows the basics of rendering with textures in a QVulkanWindow.

View File

@ -27,6 +27,7 @@
/*!
\example hellovulkantriangle
\meta installpath vulkan
\ingroup examples-vulkan
\title Hello Vulkan Triangle Example
\brief Shows the basics of rendering with QVulkanWindow and the Vulkan API.

View File

@ -27,6 +27,7 @@
/*!
\example hellovulkanwidget
\meta installpath vulkan
\ingroup examples-vulkan
\title Hello Vulkan Widget Example
\brief Shows the usage of QVulkanWindow in QWidget applications.

View File

@ -27,6 +27,7 @@
/*!
\example hellovulkanwindow
\meta installpath vulkan
\title Hello Vulkan Window Example
\ingroup examples-vulkan
\brief Shows the basics of using QVulkanWindow.

View File

@ -369,7 +369,7 @@ void ConclusionPage::setVisible(bool visible)
void ConclusionPage::printButtonClicked()
{
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
QPrinter printer;
QPrintDialog dialog(&printer, this);
if (dialog.exec())

View File

@ -264,7 +264,7 @@ void View::toggleAntialiasing()
void View::print()
{
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
QPrinter printer;
QPrintDialog dialog(&printer, this);
if (dialog.exec() == QDialog::Accepted) {

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@ -60,7 +60,7 @@ MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent)
//! [0]
//! [1]
void MySortFilterProxyModel::setFilterMinimumDate(const QDate &date)
void MySortFilterProxyModel::setFilterMinimumDate(QDate date)
{
minDate = date;
invalidateFilter();
@ -68,7 +68,7 @@ void MySortFilterProxyModel::setFilterMinimumDate(const QDate &date)
//! [1]
//! [2]
void MySortFilterProxyModel::setFilterMaximumDate(const QDate &date)
void MySortFilterProxyModel::setFilterMaximumDate(QDate date)
{
maxDate = date;
invalidateFilter();
@ -122,7 +122,7 @@ bool MySortFilterProxyModel::lessThan(const QModelIndex &left,
//! [5] //! [6]
//! [7]
bool MySortFilterProxyModel::dateInRange(const QDate &date) const
bool MySortFilterProxyModel::dateInRange(QDate date) const
{
return (!minDate.isValid() || date > minDate)
&& (!maxDate.isValid() || date < maxDate);

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@ -63,17 +63,17 @@ public:
MySortFilterProxyModel(QObject *parent = 0);
QDate filterMinimumDate() const { return minDate; }
void setFilterMinimumDate(const QDate &date);
void setFilterMinimumDate(QDate date);
QDate filterMaximumDate() const { return maxDate; }
void setFilterMaximumDate(const QDate &date);
void setFilterMaximumDate(QDate date);
protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
private:
bool dateInRange(const QDate &date) const;
bool dateInRange(QDate date) const;
QDate minDate;
QDate maxDate;

View File

@ -167,7 +167,7 @@ void MainWindow::openImage(const QString &fileName)
void MainWindow::printImage()
{
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
if (model->rowCount(QModelIndex())*model->columnCount(QModelIndex()) > 90000) {
QMessageBox::StandardButton answer;
answer = QMessageBox::question(this, tr("Large Image Size"),

View File

@ -128,7 +128,7 @@ void MainWindow::newLetter()
//! [3]
void MainWindow::print()
{
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
QTextDocument *document = textEdit->document();
QPrinter printer;

View File

@ -248,7 +248,7 @@ void MainWindow::openDialog()
//! [17]
void MainWindow::printFile()
{
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
QTextEdit *editor = static_cast<QTextEdit*>(letters->currentWidget());
//! [18]
QPrinter printer;

View File

@ -419,18 +419,18 @@ bool TextEdit::load(const QString &f)
QByteArray data = file.readAll();
QTextCodec *codec = Qt::codecForHtml(data);
QString str = codec->toUnicode(data);
QUrl baseUrl = (f.front() == QLatin1Char(':') ? QUrl(f) : QUrl::fromLocalFile(f)).adjusted(QUrl::RemoveFilename);
textEdit->document()->setBaseUrl(baseUrl);
if (Qt::mightBeRichText(str)) {
QUrl baseUrl = (f.front() == QLatin1Char(':') ? QUrl(f) : QUrl::fromLocalFile(f)).adjusted(QUrl::RemoveFilename);
textEdit->document()->setBaseUrl(baseUrl);
textEdit->setHtml(str);
} else {
#if QT_CONFIG(textmarkdownreader)
QMimeDatabase db;
if (db.mimeTypeForFileNameAndData(f, data).name() == QLatin1String("text/markdown"))
textEdit->setMarkdown(str);
textEdit->setMarkdown(QString::fromUtf8(data));
else
#endif
textEdit->setPlainText(QString::fromLocal8Bit(data));
textEdit->setPlainText(QString::fromUtf8(data));
}
setCurrentFileName(f);
@ -545,7 +545,7 @@ bool TextEdit::fileSaveAs()
void TextEdit::filePrint()
{
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
QPrinter printer(QPrinter::HighResolution);
QPrintDialog *dlg = new QPrintDialog(&printer, this);
if (textEdit->textCursor().hasSelection())

View File

@ -170,7 +170,7 @@ void ScribbleArea::resizeImage(QImage *image, const QSize &newSize)
//! [21]
void ScribbleArea::print()
{
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
QPrinter printer(QPrinter::HighResolution);
QPrintDialog printDialog(&printer, this);

View File

@ -92,7 +92,7 @@ Notepad::Notepad(QWidget *parent) :
connect(ui->actionAbout, &QAction::triggered, this, &Notepad::about);
// Disable menu actions for unavailable features
#if !QT_CONFIG(printer)
#if !defined(QT_PRINTSUPPORT_LIB) || !QT_CONFIG(printer)
ui->actionPrint->setEnabled(false);
#endif
@ -171,7 +171,7 @@ void Notepad::saveAs()
void Notepad::print()
{
#if QT_CONFIG(printer)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
QPrinter printDev;
#if QT_CONFIG(printdialog)
QPrintDialog dialog(&printDev, this);

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@ -126,7 +126,7 @@ void Window::selectedDateChanged()
//! [2]
//! [3]
void Window::minimumDateChanged(const QDate &date)
void Window::minimumDateChanged(QDate date)
{
calendar->setMinimumDate(date);
maximumDateEdit->setDate(calendar->maximumDate());
@ -134,7 +134,7 @@ void Window::minimumDateChanged(const QDate &date)
//! [3]
//! [4]
void Window::maximumDateChanged(const QDate &date)
void Window::maximumDateChanged(QDate date)
{
calendar->setMaximumDate(date);
minimumDateEdit->setDate(calendar->minimumDate());

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@ -52,6 +52,7 @@
#define WINDOW_H
#include <QWidget>
#include <QDateTime>
QT_BEGIN_NAMESPACE
class QCalendarWidget;
@ -79,8 +80,8 @@ private slots:
void horizontalHeaderChanged(int index);
void verticalHeaderChanged(int index);
void selectedDateChanged();
void minimumDateChanged(const QDate &date);
void maximumDateChanged(const QDate &date);
void minimumDateChanged(QDate date);
void maximumDateChanged(QDate date);
void weekdayFormatChanged();
void weekendFormatChanged();
void reformatHeaders();

View File

@ -201,7 +201,7 @@ void ImageViewer::print()
//! [5] //! [6]
{
Q_ASSERT(!imageLabel->pixmap(Qt::ReturnByValue).isNull());
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
//! [6] //! [7]
QPrintDialog dialog(&printer, this);
//! [7] //! [8]

View File

@ -210,7 +210,7 @@ void ScribbleArea::resizeImage(QImage *image, const QSize &newSize)
//! [21]
void ScribbleArea::print()
{
#if QT_CONFIG(printdialog)
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
QPrinter printer(QPrinter::HighResolution);
QPrintDialog printDialog(&printer, this);

View File

@ -1,6 +1,5 @@
qtPrepareTool(QMAKE_RCC, rcc, _DEP)
isEmpty(RCC_DIR):RCC_DIR = .
isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc
!contains(QMAKE_RESOURCE_FLAGS, -root):!isEmpty(QMAKE_RESOURCE_ROOT):QMAKE_RESOURCE_FLAGS += -root $$QMAKE_RESOURCE_ROOT
@ -8,39 +7,7 @@ isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc
load(resources_functions)
qtFlattenResources()
!isEmpty(RESOURCES):contains(TEMPLATE, .*lib):plugin:static {
pluginBaseName = $$basename(TARGET)
pluginName = $$lower($$replace(pluginBaseName, [-], _))
resource_init_function = $${pluginName}_plugin_resource_init
DEFINES += "QT_PLUGIN_RESOURCE_INIT_FUNCTION=$$resource_init_function"
RESOURCE_INIT_CPP = $$OUT_PWD/$${pluginName}_plugin_resources.cpp
GENERATED_SOURCES += $$RESOURCE_INIT_CPP
QMAKE_DISTCLEAN += $$RESOURCE_INIT_CPP
isEmpty(BUILDS)|build_pass {
RESOURCE_INIT_CONT = \
"// This file is autogenerated by qmake. It contains a function that" \
"// references all resources the plugin includes and the function is" \
"// referenced by Qt_(MOC_)EXPORT_PLUGIN to ensure the inclusion in" \
"// the statically linked plugin." \
"$${LITERAL_HASH}include <QtCore/qglobal.h>" \
"void $${resource_init_function}() " \
"{" \
for (resource, RESOURCES) {
resource_name = $$replace($$list($$basename(resource)),\.qrc$, )
resource_name = $$replace(resource_name, [^a-zA-Z0-9_], _)
RESOURCE_INIT_CONT += " Q_INIT_RESOURCE($$resource_name);"
}
RESOURCE_INIT_CONT += \
"}"
write_file($$RESOURCE_INIT_CPP, RESOURCE_INIT_CONT)|error()
}
}
qtEnsurePluginResourcesCpp()
rcc.input = RESOURCES
rcc.name = RCC ${QMAKE_FILE_IN}

View File

@ -9,6 +9,7 @@ defineReplace(xml_escape) {
}
defineTest(qtFlattenResources) {
isEmpty(RCC_DIR):RCC_DIR = .
immediate = qmake_immediate$$QMAKE_RESOURCES_IMMEDIATE_NR
defined(QMAKE_RESOURCES_IMMEDIATE_NR, var): \
QMAKE_RESOURCES_IMMEDIATE_NR = $$num_add($$QMAKE_RESOURCES_IMMEDIATE_NR, 1)
@ -72,9 +73,53 @@ defineTest(qtFlattenResources) {
RESOURCES -= $$resource
RESOURCES += $$resource_file
}
export(RCC_DIR)
export(QMAKE_RESOURCES_IMMEDIATE_NR)
export(RESOURCES)
export(OTHER_FILES)
export($${immediate}.files)
return(true)
}
defineTest(qtEnsurePluginResourcesCpp) {
contains(DEFINES, QT_PLUGIN_RESOURCE_INIT_FUNCTION=.*): \
return(true)
!isEmpty(RESOURCES):contains(TEMPLATE, .*lib):plugin:static {
pluginBaseName = $$basename(TARGET)
pluginName = $$lower($$replace(pluginBaseName, [-], _))
resource_init_function = $${pluginName}_plugin_resource_init
DEFINES += "QT_PLUGIN_RESOURCE_INIT_FUNCTION=$$resource_init_function"
RESOURCE_INIT_CPP = $$OUT_PWD/$${pluginName}_plugin_resources.cpp
GENERATED_SOURCES += $$RESOURCE_INIT_CPP
QMAKE_DISTCLEAN += $$RESOURCE_INIT_CPP
isEmpty(BUILDS)|build_pass {
RESOURCE_INIT_CONT = \
"// This file is autogenerated by qmake. It contains a function that" \
"// references all resources the plugin includes and the function is" \
"// referenced by Qt_(MOC_)EXPORT_PLUGIN to ensure the inclusion in" \
"// the statically linked plugin." \
"$${LITERAL_HASH}include <QtCore/qglobal.h>" \
"void $${resource_init_function}() " \
"{" \
for (resource, RESOURCES) {
resource_name = $$replace($$list($$basename(resource)),\.qrc$, )
resource_name = $$replace(resource_name, [^a-zA-Z0-9_], _)
RESOURCE_INIT_CONT += " Q_INIT_RESOURCE($$resource_name);"
}
RESOURCE_INIT_CONT += \
"}"
write_file($$RESOURCE_INIT_CPP, RESOURCE_INIT_CONT)|error()
}
export(DEFINES)
export(GENERATED_SOURCES)
export(QMAKE_DISTCLEAN)
}
return(true)
}

View File

@ -310,7 +310,7 @@ static QString commandLinesForOutput(QStringList commands)
if (!commands.at(i).startsWith("rem", Qt::CaseInsensitive))
commands.insert(i + 1, errchk);
}
return commands.join('\n');
return commands.join("\r\n");
}
static QString unquote(const QString &value)

View File

@ -1,3 +1,4 @@
INCLUDEPATH += $$PWD/md4c
HEADERS += $$PWD/md4c/md4c.h
SOURCES += $$PWD/md4c/md4c.c
DEFINES += MD4C_USE_UTF8

View File

@ -740,54 +740,66 @@ public class QtNative
public static boolean hasClipboardText()
{
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getText() != null)
return true;
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getText() != null)
return true;
}
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return false;
}
private static String getClipboardText()
{
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getText() != null)
return primaryClip.getItemAt(i).getText().toString();
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getText() != null)
return primaryClip.getItemAt(i).getText().toString();
}
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return "";
}
private static void updatePrimaryClip(ClipData clipData)
{
if (m_usePrimaryClip) {
ClipData clip = m_clipboardManager.getPrimaryClip();
if (Build.VERSION.SDK_INT >= 26) {
if (m_addItemMethod == null) {
Class[] cArg = new Class[2];
cArg[0] = ContentResolver.class;
cArg[1] = ClipData.Item.class;
try {
m_addItemMethod = m_clipboardManager.getClass().getMethod("addItem", cArg);
} catch (Exception e) {
try {
if (m_usePrimaryClip) {
ClipData clip = m_clipboardManager.getPrimaryClip();
if (Build.VERSION.SDK_INT >= 26) {
if (m_addItemMethod == null) {
Class[] cArg = new Class[2];
cArg[0] = ContentResolver.class;
cArg[1] = ClipData.Item.class;
try {
m_addItemMethod = m_clipboardManager.getClass().getMethod("addItem", cArg);
} catch (Exception e) {
}
}
}
}
if (m_addItemMethod != null) {
try {
m_addItemMethod.invoke(m_activity.getContentResolver(), clipData.getItemAt(0));
} catch (Exception e) {
e.printStackTrace();
if (m_addItemMethod != null) {
try {
m_addItemMethod.invoke(m_activity.getContentResolver(), clipData.getItemAt(0));
} catch (Exception e) {
e.printStackTrace();
}
} else {
clip.addItem(clipData.getItemAt(0));
}
m_clipboardManager.setPrimaryClip(clip);
} else {
clip.addItem(clipData.getItemAt(0));
m_clipboardManager.setPrimaryClip(clipData);
m_usePrimaryClip = true;
}
m_clipboardManager.setPrimaryClip(clip);
} else {
m_clipboardManager.setPrimaryClip(clipData);
m_usePrimaryClip = true;
} catch (Exception e) {
Log.e(QtTAG, "Failed to set clipboard data", e);
}
}
@ -801,22 +813,30 @@ public class QtNative
public static boolean hasClipboardHtml()
{
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getHtmlText() != null)
return true;
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getHtmlText() != null)
return true;
}
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return false;
}
private static String getClipboardHtml()
{
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getHtmlText() != null)
return primaryClip.getItemAt(i).getHtmlText().toString();
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getHtmlText() != null)
return primaryClip.getItemAt(i).getHtmlText().toString();
}
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return "";
}
@ -832,11 +852,15 @@ public class QtNative
public static boolean hasClipboardUri()
{
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getUri() != null)
return true;
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getUri() != null)
return true;
}
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
return false;
}
@ -844,11 +868,15 @@ public class QtNative
private static String[] getClipboardUris()
{
ArrayList<String> uris = new ArrayList<String>();
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getUri() != null)
uris.add(primaryClip.getItemAt(i).getUri().toString());
try {
if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) {
ClipData primaryClip = m_clipboardManager.getPrimaryClip();
for (int i = 0; i < primaryClip.getItemCount(); ++i)
if (primaryClip.getItemAt(i).getUri() != null)
uris.add(primaryClip.getItemAt(i).getUri().toString());
}
} catch (Exception e) {
Log.e(QtTAG, "Failed to get clipboard data", e);
}
String[] strings = new String[uris.size()];
strings = uris.toArray(strings);

View File

@ -62,7 +62,7 @@ public class QtActivityLoader extends QtLoader {
protected void downloadUpgradeMinistro(String msg) {
AlertDialog.Builder downloadDialog = new AlertDialog.Builder(m_activity);
downloadDialog.setMessage(msg);
downloadDialog.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
downloadDialog.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
try {
@ -76,7 +76,7 @@ public class QtActivityLoader extends QtLoader {
}
});
downloadDialog.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
downloadDialog.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
m_activity.finish();

View File

@ -59,7 +59,14 @@ macro(qt5_make_output_file infile prefix ext outfile )
set(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${rel}")
string(REPLACE ".." "__" _outfile ${_outfile})
get_filename_component(outpath ${_outfile} PATH)
get_filename_component(_outfile ${_outfile} NAME_WE)
if(CMAKE_VERSION VERSION_LESS "3.14")
get_filename_component(_outfile_ext ${_outfile} EXT)
get_filename_component(_outfile_ext ${_outfile_ext} NAME_WE)
get_filename_component(_outfile ${_outfile} NAME_WE)
string(APPEND _outfile ${_outfile_ext})
else()
get_filename_component(_outfile ${_outfile} NAME_WLE)
endif()
file(MAKE_DIRECTORY ${outpath})
set(${outfile} ${outpath}/${prefix}${_outfile}.${ext})
endmacro()

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
@ -135,7 +135,7 @@ class Employee
{
public:
Employee() {}
Employee(const QString &name, const QDate &dateOfBirth);
Employee(const QString &name, QDate dateOfBirth);
...
private:

View File

@ -151,7 +151,7 @@ class Employee
{
public:
Employee() {}
Employee(const QString &name, const QDate &dateOfBirth);
Employee(const QString &name, QDate dateOfBirth);
...
private:

View File

@ -213,7 +213,7 @@ f16cextern void qFloatFromFloat16_fast(float *out, const quint16 *in, qsizetype
#undef f16cextern
}
#elif defined(__ARM_FP16_FORMAT_IEEE) && defined(__ARM_NEON__)
#elif defined(__ARM_FP16_FORMAT_IEEE) && defined(__ARM_NEON__) && (__ARM_FP & 2)
static inline bool hasFastF16()
{
return true;

View File

@ -44,7 +44,7 @@
QT_BEGIN_NAMESPACE
#if !defined(__F16C__) && !defined(__ARM_FP16_FORMAT_IEEE)
#if !defined(__ARM_FP16_FORMAT_IEEE)
const quint32 qfloat16::mantissatable[2048] = {
0,

View File

@ -1669,14 +1669,34 @@ static bool android_default_message_handler(QtMsgType type,
#endif //Q_OS_ANDROID
#ifdef Q_OS_WIN
static void win_outputDebugString_helper(QStringView message)
{
const int maxOutputStringLength = 32766;
static QBasicMutex m;
auto locker = qt_unique_lock(m);
// fast path: Avoid string copies if one output is enough
if (message.length() <= maxOutputStringLength) {
OutputDebugString(reinterpret_cast<const wchar_t *>(message.utf16()));
} else {
wchar_t *messagePart = new wchar_t[maxOutputStringLength + 1];
for (int i = 0; i < message.length(); i += maxOutputStringLength ) {
const int length = std::min(message.length() - i, maxOutputStringLength );
const int len = message.mid(i, length).toWCharArray(messagePart);
Q_ASSERT(len == length);
messagePart[len] = 0;
OutputDebugString(messagePart);
}
delete[] messagePart;
}
}
static bool win_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &message)
{
if (shouldLogToStderr())
return false; // Leave logging up to stderr handler
QString formattedMessage = qFormatLogMessage(type, context, message);
formattedMessage.append(QLatin1Char('\n'));
OutputDebugString(reinterpret_cast<const wchar_t *>(formattedMessage.utf16()));
const QString formattedMessage = qFormatLogMessage(type, context, message).append('\n');
win_outputDebugString_helper(formattedMessage);
return true; // Prevent further output to stderr
}
@ -1832,11 +1852,11 @@ static void qt_message_print(QtMsgType msgType, const QMessageLogContext &contex
static void qt_message_print(const QString &message)
{
#if defined(Q_OS_WINRT)
OutputDebugString(reinterpret_cast<const wchar_t*>(message.utf16()));
win_outputDebugString_helper(message);
return;
#elif defined(Q_OS_WIN) && !defined(QT_BOOTSTRAPPED)
if (!shouldLogToStderr()) {
OutputDebugString(reinterpret_cast<const wchar_t*>(message.utf16()));
win_outputDebugString_helper(message);
return;
}
#endif

View File

@ -1199,6 +1199,7 @@
\value WA_StyleSheetTarget Indicates that the widget appearance was modified
by a \l{Qt Style Sheets}{style sheet}. WA_StyleSheet will also be set.
This value was introduced in Qt 5.12.
\value WA_TabletTracking Indicates that the widget has tablet
tracking enabled. See QWidget::tabletTracking.

View File

@ -714,7 +714,7 @@ void QIODevicePrivate::setReadChannelCount(int count)
/*!
\since 5.7
Returns the the index of the current write channel.
Returns the index of the current write channel.
\sa setCurrentWriteChannel(), writeChannelCount()
*/

View File

@ -58,7 +58,8 @@
#include <sys/file.h> // flock
#endif
#if defined(Q_OS_RTEMS)
#if defined(Q_OS_RTEMS) || defined(Q_OS_QNX)
// flock() does not work in these OSes and produce warnings when we try to use
# undef LOCK_EX
# undef LOCK_NB
#endif

View File

@ -247,7 +247,7 @@ AppleApplication *qt_apple_sharedApplication()
qWarning() << "accessing the shared" << [AppleApplication class]
<< "is not allowed in application extensions";
// In practice the application is actually available, but the the App
// In practice the application is actually available, but the App
// review process will likely catch uses of it, so we return nil just
// in case, unless we don't care about being App Store compliant.
#if QT_CONFIG(appstore_compliant)

View File

@ -660,6 +660,11 @@ static QLocalePrivate *c_private()
return &c_locale;
}
static const QLocaleData *systemData();
static QLocale::NumberOptions system_number_options = QLocale::DefaultNumberOptions;
Q_GLOBAL_STATIC_WITH_ARGS(QExplicitlySharedDataPointer<QLocalePrivate>, systemLocalePrivate,
(QLocalePrivate::create(systemData(), system_number_options)))
#ifndef QT_NO_SYSTEMLOCALE
/******************************************************************************
** Default system locale behavior
@ -711,6 +716,7 @@ static void updateSystemPrivate()
{
// This function is NOT thread-safe!
// It *should not* be called by anything but systemData()
// It *is* called before {system,default}LocalePrivate exist.
const QSystemLocale *sys_locale = systemLocale();
// tell the object that the system locale has changed.
@ -718,11 +724,14 @@ static void updateSystemPrivate()
// Populate global with fallback as basis:
globalLocaleData = *sys_locale->fallbackUiLocaleData();
system_number_options = QLocale::DefaultNumberOptions;
QVariant res = sys_locale->query(QSystemLocale::LanguageId, QVariant());
if (!res.isNull()) {
globalLocaleData.m_language_id = res.toInt();
globalLocaleData.m_script_id = QLocale::AnyScript; // default for compatibility
if (globalLocaleData.m_language_id == QLocale::C)
system_number_options = QLocale::OmitGroupSeparator;
}
res = sys_locale->query(QSystemLocale::CountryId, QVariant());
if (!res.isNull()) {
@ -737,9 +746,26 @@ static void updateSystemPrivate()
if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_decimal = res.toString().at(0).unicode();
// System may supply empty group separator to say we should omit grouping;
// and it makes no sense to use the same separator for decimal and grouping
// (which might happen by system supplying, as decimal, what CLDR has given
// us for grouping; or the other way round). Assume, at least, that each of
// system and CLDR has decimal != group, all the same.
res = sys_locale->query(QSystemLocale::GroupSeparator, QVariant());
if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_group = res.toString().at(0).unicode();
if (res.isNull()) {
// The case where system over-rides decimal but not group, and its
// decimal clashes with CLDR's group.
if (globalLocaleData.m_group == globalLocaleData.m_decimal)
system_number_options |= QLocale::OmitGroupSeparator;
} else if (res.toString().isEmpty()) {
system_number_options |= QLocale::OmitGroupSeparator;
} else {
const ushort group = res.toString().at(0).unicode();
if (group != globalLocaleData.m_decimal)
globalLocaleData.m_group = group;
else if (group == globalLocaleData.m_group)
qWarning("System-supplied decimal and grouping character are both 0x%hx", group);
}
res = sys_locale->query(QSystemLocale::ZeroDigit, QVariant());
if (!res.isNull() && !res.toString().isEmpty())
@ -752,6 +778,10 @@ static void updateSystemPrivate()
res = sys_locale->query(QSystemLocale::PositiveSign, QVariant());
if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_plus = res.toString().at(0).unicode();
if (systemLocalePrivate.exists())
systemLocalePrivate->data()->m_numberOptions = system_number_options;
// else: system_number_options will be passed to create() when constructing.
}
#endif // !QT_NO_SYSTEMLOCALE
@ -834,8 +864,6 @@ static const int locale_data_size = sizeof(locale_data)/sizeof(QLocaleData) - 1;
Q_GLOBAL_STATIC_WITH_ARGS(QSharedDataPointer<QLocalePrivate>, defaultLocalePrivate,
(QLocalePrivate::create(defaultData())))
Q_GLOBAL_STATIC_WITH_ARGS(QExplicitlySharedDataPointer<QLocalePrivate>, systemLocalePrivate,
(QLocalePrivate::create(systemData())))
static QLocalePrivate *localePrivateByName(const QString &name)
{

View File

@ -119,7 +119,7 @@ static QString macDayName(int day, bool short_format)
return QString();
}
static QString macDateToString(const QDate &date, bool short_format)
static QString macDateToString(QDate date, bool short_format)
{
QCFType<CFDateRef> myDate = QDateTime(date, QTime()).toCFDate();
QCFType<CFLocaleRef> mylocale = CFLocaleCopyCurrent();
@ -131,7 +131,7 @@ static QString macDateToString(const QDate &date, bool short_format)
return QCFString(CFDateFormatterCreateStringWithDate(0, myFormatter, myDate));
}
static QString macTimeToString(const QTime &time, bool short_format)
static QString macTimeToString(QTime time, bool short_format)
{
QCFType<CFDateRef> myDate = QDateTime(QDate::currentDate(), time).toCFDate();
QCFType<CFLocaleRef> mylocale = CFLocaleCopyCurrent();
@ -283,10 +283,12 @@ static QString getMacTimeFormat(CFDateFormatterStyle style)
return macToQtFormat(QString::fromCFString(CFDateFormatterGetFormat(formatter)));
}
static QString getCFLocaleValue(CFStringRef key)
static QVariant getCFLocaleValue(CFStringRef key)
{
QCFType<CFLocaleRef> locale = CFLocaleCopyCurrent();
CFTypeRef value = CFLocaleGetValue(locale, key);
if (!value)
return QVariant();
return QString::fromCFString(CFStringRef(static_cast<CFTypeRef>(value)));
}
@ -411,14 +413,10 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
switch(type) {
// case Name:
// return getMacLocaleName();
case DecimalPoint: {
QString value = getCFLocaleValue(kCFLocaleDecimalSeparator);
return value.isEmpty() ? QVariant() : value;
}
case GroupSeparator: {
QString value = getCFLocaleValue(kCFLocaleGroupingSeparator);
return value.isEmpty() ? QVariant() : value;
}
case DecimalPoint:
return getCFLocaleValue(kCFLocaleDecimalSeparator);
case GroupSeparator:
return getCFLocaleValue(kCFLocaleGroupingSeparator);
case DateFormatLong:
case DateFormatShort:
return getMacDateFormat(type == DateFormatShort

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@ -87,7 +87,7 @@ public:
LanguageId, // uint
CountryId, // uint
DecimalPoint, // QString
GroupSeparator, // QString
GroupSeparator, // QString (empty QString means: don't group digits)
ZeroDigit, // QString
NegativeSign, // QString
DateFormatLong, // QString

View File

@ -106,11 +106,11 @@ struct QSystemLocalePrivate
{
QSystemLocalePrivate();
QString zeroDigit();
QString decimalPoint();
QString groupSeparator();
QString negativeSign();
QString positiveSign();
QVariant zeroDigit();
QVariant decimalPoint();
QVariant groupSeparator();
QVariant negativeSign();
QVariant positiveSign();
QVariant dateFormat(QLocale::FormatType);
QVariant timeFormat(QLocale::FormatType);
QVariant dateTimeFormat(QLocale::FormatType);
@ -150,7 +150,9 @@ private:
QString zero; // cached value for zeroDigit()
int getLocaleInfo(LCTYPE type, LPWSTR data, int size);
QString getLocaleInfo(LCTYPE type, int maxlen = 0);
// Need to distinguish empty QString packaged as (non-null) QVariant from null QVariant:
template <typename T = QString>
T getLocaleInfo(LCTYPE type, int maxlen = 0);
int getLocaleInfo_int(LCTYPE type, int maxlen = 0);
int getCurrencyFormat(DWORD flags, LPCWSTR value, const CURRENCYFMTW *format, LPWSTR data, int size);
@ -211,19 +213,30 @@ inline int QSystemLocalePrivate::getLocaleInfo(LCTYPE type, LPWSTR data, int siz
#endif
}
QString QSystemLocalePrivate::getLocaleInfo(LCTYPE type, int maxlen)
template<typename T>
T QSystemLocalePrivate::getLocaleInfo(LCTYPE type, int maxlen)
{
// https://docs.microsoft.com/en-us/windows/win32/intl/locale-spositivesign
// says empty for LOCALE_SPOSITIVESIGN means "+", although GetLocaleInfo()
// is documented to return 0 only on failure, so it's not clear how it
// returns empty to mean this; hence the two checks for it below.
const QString plus = QStringLiteral("+");
QVarLengthArray<wchar_t, 64> buf(maxlen ? maxlen : 64);
if (!getLocaleInfo(type, buf.data(), buf.size()))
return QString();
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
if (!getLocaleInfo(type, buf.data(), buf.size())) {
const auto lastError = GetLastError();
if (type == LOCALE_SPOSITIVESIGN && lastError == ERROR_SUCCESS)
return plus;
if (lastError != ERROR_INSUFFICIENT_BUFFER)
return {};
int cnt = getLocaleInfo(type, 0, 0);
if (cnt == 0)
return QString();
return {};
buf.resize(cnt);
if (!getLocaleInfo(type, buf.data(), buf.size()))
return QString();
return {};
}
if (type == LOCALE_SPOSITIVESIGN && !buf[0])
return plus;
return QString::fromWCharArray(buf.data());
}
@ -298,7 +311,7 @@ QString &QSystemLocalePrivate::substituteDigits(QString &string)
return string;
}
QString QSystemLocalePrivate::zeroDigit()
QVariant QSystemLocalePrivate::zeroDigit()
{
if (zero.isEmpty()) {
/* Ten digits plus a terminator.
@ -317,24 +330,24 @@ QString QSystemLocalePrivate::zeroDigit()
return zero;
}
QString QSystemLocalePrivate::decimalPoint()
QVariant QSystemLocalePrivate::decimalPoint()
{
return getLocaleInfo(LOCALE_SDECIMAL);
return getLocaleInfo<QVariant>(LOCALE_SDECIMAL);
}
QString QSystemLocalePrivate::groupSeparator()
QVariant QSystemLocalePrivate::groupSeparator()
{
return getLocaleInfo(LOCALE_STHOUSAND);
return getLocaleInfo<QVariant>(LOCALE_STHOUSAND);
}
QString QSystemLocalePrivate::negativeSign()
QVariant QSystemLocalePrivate::negativeSign()
{
return getLocaleInfo(LOCALE_SNEGATIVESIGN);
return getLocaleInfo<QVariant>(LOCALE_SNEGATIVESIGN);
}
QString QSystemLocalePrivate::positiveSign()
QVariant QSystemLocalePrivate::positiveSign()
{
return getLocaleInfo(LOCALE_SPOSITIVESIGN);
return getLocaleInfo<QVariant>(LOCALE_SPOSITIVESIGN);
}
QVariant QSystemLocalePrivate::dateFormat(QLocale::FormatType type)
@ -392,10 +405,10 @@ QVariant QSystemLocalePrivate::dayName(int day, QLocale::FormatType type)
day -= 1;
if (type == QLocale::LongFormat)
return getLocaleInfo(long_day_map[day]);
return getLocaleInfo<QVariant>(long_day_map[day]);
if (type == QLocale::NarrowFormat)
return getLocaleInfo(narrow_day_map[day]);
return getLocaleInfo(short_day_map[day]);
return getLocaleInfo<QVariant>(narrow_day_map[day]);
return getLocaleInfo<QVariant>(short_day_map[day]);
}
QVariant QSystemLocalePrivate::monthName(int month, QLocale::FormatType type)
@ -418,7 +431,7 @@ QVariant QSystemLocalePrivate::monthName(int month, QLocale::FormatType type)
LCTYPE lctype = (type == QLocale::ShortFormat || type == QLocale::NarrowFormat)
? short_month_map[month] : long_month_map[month];
return getLocaleInfo(lctype);
return getLocaleInfo<QVariant>(lctype);
}
QVariant QSystemLocalePrivate::toString(QDate date, QLocale::FormatType type)
@ -485,7 +498,7 @@ QVariant QSystemLocalePrivate::measurementSystem()
QVariant QSystemLocalePrivate::collation()
{
return getLocaleInfo(LOCALE_SSORTLOCALE);
return getLocaleInfo<QVariant>(LOCALE_SSORTLOCALE);
}
QVariant QSystemLocalePrivate::amText()
@ -687,12 +700,12 @@ QVariant QSystemLocalePrivate::uiLanguages()
QVariant QSystemLocalePrivate::nativeLanguageName()
{
return getLocaleInfo(LOCALE_SNATIVELANGUAGENAME);
return getLocaleInfo<QVariant>(LOCALE_SNATIVELANGUAGENAME);
}
QVariant QSystemLocalePrivate::nativeCountryName()
{
return getLocaleInfo(LOCALE_SNATIVECOUNTRYNAME);
return getLocaleInfo<QVariant>(LOCALE_SNATIVECOUNTRYNAME);
}

View File

@ -682,7 +682,7 @@ static bool inDateTimeRange(qint64 jd, bool start)
return jd >= minDay && jd < maxDay;
}
static QDateTime toEarliest(const QDate &day, const QDateTime &form)
static QDateTime toEarliest(QDate day, const QDateTime &form)
{
const Qt::TimeSpec spec = form.timeSpec();
const int offset = (spec == Qt::OffsetFromUTC) ? form.offsetFromUtc() : 0;
@ -806,7 +806,7 @@ QDateTime QDate::startOfDay(const QTimeZone &zone) const
}
#endif // timezone
static QDateTime toLatest(const QDate &day, const QDateTime &form)
static QDateTime toLatest(QDate day, const QDateTime &form)
{
const Qt::TimeSpec spec = form.timeSpec();
const int offset = (spec == Qt::OffsetFromUTC) ? form.offsetFromUtc() : 0;
@ -1098,9 +1098,8 @@ QString QDate::longDayName(int weekday, MonthNameType type)
}
#endif // textdate && deprecated
#if QT_CONFIG(datestring)
#if QT_CONFIG(datestring) // depends on, so implies, textdate
#if QT_CONFIG(textdate)
static QString toStringTextDate(QDate date, QCalendar cal)
{
if (date.isValid()) {
@ -1114,9 +1113,8 @@ static QString toStringTextDate(QDate date, QCalendar cal)
}
return QString();
}
#endif // textdate
static QString toStringIsoDate(const QDate &date)
static QString toStringIsoDate(QDate date)
{
const auto parts = QCalendar().partsFromDate(date);
if (parts.isValid() && parts.year >= 0 && parts.year <= 9999)
@ -1194,10 +1192,8 @@ QString QDate::toString(Qt::DateFormat format, QCalendar cal) const
case Qt::RFC2822Date:
return QLocale::c().toString(*this, QStringView(u"dd MMM yyyy"), cal);
default:
#ifndef QT_NO_TEXTDATE
case Qt::TextDate:
return toStringTextDate(*this, cal);
#endif
case Qt::ISODate:
case Qt::ISODateWithMs:
// No calendar dependence
@ -1599,7 +1595,7 @@ qint64 QDate::daysTo(const QDate &d) const
\sa QTime::currentTime(), QDateTime::currentDateTime()
*/
#if QT_CONFIG(datestring)
#if QT_CONFIG(datestring) // depends on, so implies, textdate
namespace {
struct ParsedInt { int value = 0; bool ok = false; };
@ -1661,7 +1657,6 @@ QDate QDate::fromString(const QString &string, Qt::DateFormat format)
case Qt::RFC2822Date:
return rfcDateImpl(string).date;
default:
#if QT_CONFIG(textdate)
case Qt::TextDate: {
QVector<QStringRef> parts = string.splitRef(QLatin1Char(' '), QString::SkipEmptyParts);
@ -1680,7 +1675,6 @@ QDate QDate::fromString(const QString &string, Qt::DateFormat format)
return QDate(year, month, day);
}
#endif // textdate
case Qt::ISODate:
// Semi-strict parsing, must be long enough and have punctuators as separators
if (string.size() >= 10 && string.at(4).isPunct() && string.at(7).isPunct()
@ -1995,7 +1989,7 @@ int QTime::msec() const
return ds() % 1000;
}
#if QT_CONFIG(datestring)
#if QT_CONFIG(datestring) // depends on, so implies, textdate
/*!
\overload
@ -2327,7 +2321,7 @@ int QTime::msecsTo(const QTime &t) const
\sa QDateTime::currentDateTime(), QDateTime::currentDateTimeUtc()
*/
#if QT_CONFIG(datestring)
#if QT_CONFIG(datestring) // depends on, so implies, textdate
static QTime fromIsoTimeString(QStringView string, Qt::DateFormat format, bool *isMidnight24)
{
@ -2865,7 +2859,7 @@ static void msecsToTime(qint64 msecs, QDate *date, QTime *time)
}
// Converts a date/time value into msecs
static qint64 timeToMSecs(const QDate &date, const QTime &time)
static qint64 timeToMSecs(QDate date, QTime time)
{
return ((date.toJulianDay() - JULIAN_DAY_FOR_EPOCH) * MSECS_PER_DAY)
+ time.msecsSinceStartOfDay();
@ -3210,7 +3204,7 @@ static void setTimeSpec(QDateTimeData &d, Qt::TimeSpec spec, int offsetSeconds)
}
}
static void setDateTime(QDateTimeData &d, const QDate &date, const QTime &time)
static void setDateTime(QDateTimeData &d, QDate date, QTime time)
{
// If the date is valid and the time is not we set time to 00:00:00
QTime useTime = time;
@ -4283,7 +4277,7 @@ void QDateTime::setTime_t(uint secsSince1Jan1970UTC)
}
#endif
#if QT_CONFIG(datestring)
#if QT_CONFIG(datestring) // depends on, so implies, textdate
/*!
\fn QString QDateTime::toString(Qt::DateFormat format) const
\fn QString QDateTime::toString(Qt::DateFormat format, QCalendar cal) const
@ -4363,7 +4357,6 @@ QString QDateTime::toString(Qt::DateFormat format, QCalendar cal) const
return buf;
}
default:
#if QT_CONFIG(textdate)
case Qt::TextDate: {
const QPair<QDate, QTime> p = getDateTime(d);
buf = toStringTextDate(p.first, cal);
@ -4374,11 +4367,11 @@ QString QDateTime::toString(Qt::DateFormat format, QCalendar cal) const
switch (timeSpec()) {
case Qt::LocalTime:
break;
# if QT_CONFIG(timezone)
#if QT_CONFIG(timezone)
case Qt::TimeZone:
buf += QLatin1Char(' ') + d->m_timeZone.abbreviation(*this);
break;
# endif
#endif
default:
buf += QLatin1String(" GMT");
if (getSpec(d) == Qt::OffsetFromUTC)
@ -4386,7 +4379,6 @@ QString QDateTime::toString(Qt::DateFormat format, QCalendar cal) const
}
return buf;
}
#endif
case Qt::ISODate:
case Qt::ISODateWithMs: {
// No calendar dependence
@ -5212,7 +5204,7 @@ int QDateTime::utcOffset() const
}
#endif // QT_DEPRECATED_SINCE
#if QT_CONFIG(datestring)
#if QT_CONFIG(datestring) // depends on, so implies, textdate
/*!
Returns the QDateTime represented by the \a string, using the
@ -5323,7 +5315,6 @@ QDateTime QDateTime::fromString(const QString &string, Qt::DateFormat format)
date = date.addDays(1);
return QDateTime(date, time, spec, offset);
}
#if QT_CONFIG(textdate)
case Qt::TextDate: {
QVector<QStringRef> parts = string.splitRef(QLatin1Char(' '), QString::SkipEmptyParts);
@ -5429,7 +5420,6 @@ QDateTime QDateTime::fromString(const QString &string, Qt::DateFormat format)
return QDateTime(date, time, Qt::UTC);
}
}
#endif // textdate
}
return QDateTime();

View File

@ -903,7 +903,7 @@ QDateTimeParser::parseSection(const QDateTime &currentValue, int sectionIndex,
by \a weekDay.
*/
static int weekDayWithinMonth(const QCalendar &calendar, const QDate &rough, int weekDay)
static int weekDayWithinMonth(QCalendar calendar, QDate rough, int weekDay)
{
// TODO: can we adapt this to cope gracefully with intercallary days (day of
// week > 7) without making it slower for more widely-used calendars ?

View File

@ -363,7 +363,7 @@ QDate calculateTransitionLocalDate(const SYSTEMTIME &rule, int year)
}
// Converts a date/time value into msecs
inline qint64 timeToMSecs(const QDate &date, const QTime &time)
inline qint64 timeToMSecs(QDate date, QTime time)
{
return ((date.toJulianDay() - JULIAN_DAY_FOR_EPOCH) * MSECS_PER_DAY)
+ time.msecsSinceStartOfDay();

View File

@ -305,7 +305,7 @@ void QBitArray::fill(bool value, int begin, int end)
\since 5.11
Returns a pointer to a dense bit array for this QBitArray. Bits are counted
upwards from the least significant bit in each byte. The the number of bits
upwards from the least significant bit in each byte. The number of bits
relevant in the last byte is given by \c{size() % 8}.
\sa fromBits(), size()

View File

@ -97,7 +97,7 @@ qtConfig(png) {
MIPS_DSPR2_ASM += image/qimage_mips_dspr2_asm.S
} else {
# see https://developer.android.com/ndk/guides/abis
arm64-v8a {
arm64-v8a | armeabi-v7a {
SOURCES += image/qimage_neon.cpp
}
x86 | x86_64 {

View File

@ -1527,7 +1527,7 @@ QDebug operator<<(QDebug dbg, const QIcon &i)
\internal
\since 5.6
Attempts to find a suitable @Nx file for the given \a targetDevicePixelRatio
Returns the the \a baseFileName if no such file was found.
Returns the \a baseFileName if no such file was found.
Given base foo.png and a target dpr of 2.5, this function will look for
foo@3x.png, then foo@2x, then fall back to foo.png if not found.

View File

@ -1621,7 +1621,9 @@ const uchar *QImage::scanLine(int i) const
Returns a pointer to the pixel data at the scanline with index \a
i. The first scanline is at index 0.
The scanline data is aligned on a 32-bit boundary.
The scanline data is as minimum 32-bit aligned. For 64-bit formats
it follows the native alignment of 64-bit integers (64-bit for most
platforms, but notably 32-bit on i386).
Note that QImage uses \l{Implicit Data Sharing} {implicit data
sharing}, but this function does \e not perform a deep copy of the

View File

@ -606,7 +606,7 @@ bool QPngHandlerPrivate::readPngHeader()
#endif
png_uint_32 profLen;
png_get_iCCP(png_ptr, info_ptr, &name, &compressionType, &profileData, &profLen);
colorSpace = QColorSpace::fromIccProfile(QByteArray::fromRawData((const char *)profileData, profLen));
colorSpace = QColorSpace::fromIccProfile(QByteArray((const char *)profileData, profLen));
if (!colorSpace.isValid()) {
qWarning() << "QPngHandler: Failed to parse ICC profile";
} else {

View File

@ -485,7 +485,7 @@ QT_BEGIN_NAMESPACE
/*!
\fn ByteOrder QPixelFormat::byteOrder() const
The byte order is almost always set the the byte order of the current
The byte order is almost always set the byte order of the current
system. However, it can be useful to describe some YUV formats. This
function should never return QPixelFormat::CurrentSystemEndian as this
value is translated to a endian value in the constructor.

View File

@ -740,7 +740,7 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w, const QRect &initialGeo
QPlatformWindow subclasses can re-implement this function to
provide display refresh synchronized updates. The event
should be delivered using QPlatformWindow::deliverUpdateRequest()
to not get out of sync with the the internal state of QWindow.
to not get out of sync with the internal state of QWindow.
The default implementation posts an UpdateRequest event to the
window after 5 ms. The additional time is there to give the event

View File

@ -149,6 +149,8 @@ QScreen::~QScreen()
/*!
Get the platform screen handle.
\sa {Qt Platform Abstraction}{Qt Platform Abstraction (QPA)}
*/
QPlatformScreen *QScreen::handle() const
{

View File

@ -161,7 +161,7 @@ gcc:equals(QT_GCC_MAJOR_VERSION, 5) {
DEFINES += QT_COMPILER_SUPPORTS_SSE4_1 QT_COMPILER_SUPPORTS_SSE4_2
SOURCES += painting/qdrawhelper_sse4.cpp painting/qimagescale_sse4.cpp
}
arm64-v8a {
arm64-v8a | armeabi-v7a {
SOURCES += painting/qdrawhelper_neon.cpp painting/qimagescale_neon.cpp
HEADERS += painting/qdrawhelper_neon_p.h
}

View File

@ -281,7 +281,7 @@ QSize QBackingStore::size() const
bool QBackingStore::scroll(const QRegion &area, int dx, int dy)
{
// Disable scrolling for non-integer scroll deltas. For this case
// the the existing rendered pixels can't be re-used, and we return
// the existing rendered pixels can't be re-used, and we return
// false to signal that a repaint is needed.
const qreal nativeDx = QHighDpi::toNativePixels(qreal(dx), d_ptr->window);
const qreal nativeDy = QHighDpi::toNativePixels(qreal(dy), d_ptr->window);

View File

@ -1652,7 +1652,7 @@ QRhiTextureUploadDescription::QRhiTextureUploadDescription(const QRhiTextureUplo
Constructs a texture upload description with the specified \a list of entries.
\note \a list can also contain multiple QRhiTextureUploadEntry elements
with the the same layer and level. This makes sense when those uploads are
with the same layer and level. This makes sense when those uploads are
partial, meaning their subresource description has a source size or image
smaller than the subresource dimensions, and can be more efficient than
issuing separate uploadTexture()'s.
@ -3505,7 +3505,7 @@ QRhiResource::Type QRhiGraphicsPipeline::resourceType() const
\l{QSurfaceFormat::sRGBColorSpace}{sRGBColorSpace} on the QSurfaceFormat of
the QWindow in addition.
\value UsedAsTransferSource Indicates the the swapchain will be used as the
\value UsedAsTransferSource Indicates the swapchain will be used as the
source of a readback in QRhiResourceUpdateBatch::readBackTexture().
\value NoVSync Requests disabling waiting for vertical sync, also avoiding
@ -3622,7 +3622,7 @@ QRhiResource::Type QRhiSwapChain::resourceType() const
\fn QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget()
\return a render target that can used with beginPass() in order to render
the the swapchain's current backbuffer. Only valid within a
the swapchain's current backbuffer. Only valid within a
QRhi::beginFrame() - QRhi::endFrame() block where beginFrame() was called
with this swapchain.
@ -4448,7 +4448,7 @@ void QRhiResourceUpdateBatch::generateMips(QRhiTexture *tex, int layer)
recorded.
\note the return value is not owned by the caller and must never be
destroyed. Instead, the batch is returned the the pool for reuse by passing
destroyed. Instead, the batch is returned the pool for reuse by passing
it to QRhiCommandBuffer::beginPass(), QRhiCommandBuffer::endPass(), or
QRhiCommandBuffer::resourceUpdate(), or by calling
QRhiResourceUpdateBatch::release() on it.

View File

@ -397,10 +397,12 @@ int QTextMarkdownImporter::cbEnterSpan(int spanType, void *det)
break;
case MD_SPAN_A: {
MD_SPAN_A_DETAIL *detail = static_cast<MD_SPAN_A_DETAIL *>(det);
QString url = QString::fromLatin1(detail->href.text, int(detail->href.size));
QString title = QString::fromLatin1(detail->title.text, int(detail->title.size));
QString url = QString::fromUtf8(detail->href.text, int(detail->href.size));
QString title = QString::fromUtf8(detail->title.text, int(detail->title.size));
charFmt.setAnchor(true);
charFmt.setAnchorHref(url);
charFmt.setAnchorNames(QStringList(title));
if (!title.isEmpty())
charFmt.setToolTip(title);
charFmt.setForeground(m_palette.link());
qCDebug(lcMD) << "anchor" << url << title;
} break;

View File

@ -56,10 +56,13 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcMDW, "qt.text.markdown.writer")
static const QChar Space = QLatin1Char(' ');
static const QChar Tab = QLatin1Char('\t');
static const QChar Newline = QLatin1Char('\n');
static const QChar CarriageReturn = QLatin1Char('\r');
static const QChar LineBreak = QChar(0x2028);
static const QChar DoubleQuote = QLatin1Char('"');
static const QChar Backtick = QLatin1Char('`');
static const QChar Backslash = QLatin1Char('\\');
static const QChar Period = QLatin1Char('.');
QTextMarkdownWriter::QTextMarkdownWriter(QTextStream &stream, QTextDocument::MarkdownFeatures features)
@ -291,6 +294,72 @@ static void maybeEscapeFirstChar(QString &s)
}
}
struct LineEndPositions {
const QChar *lineEnd;
const QChar *nextLineBegin;
};
static LineEndPositions findLineEnd(const QChar *begin, const QChar *end)
{
LineEndPositions result{ end, end };
while (begin < end) {
if (*begin == Newline) {
result.lineEnd = begin;
result.nextLineBegin = begin + 1;
break;
} else if (*begin == CarriageReturn) {
result.lineEnd = begin;
result.nextLineBegin = begin + 1;
if (((begin + 1) < end) && begin[1] == Newline)
++result.nextLineBegin;
break;
}
++begin;
}
return result;
}
static bool isBlankLine(const QChar *begin, const QChar *end)
{
while (begin < end) {
if (*begin != Space && *begin != Tab)
return false;
++begin;
}
return true;
}
static QString createLinkTitle(const QString &title)
{
QString result;
result.reserve(title.size() + 2);
result += DoubleQuote;
const QChar *data = title.data();
const QChar *end = data + title.size();
while (data < end) {
const auto lineEndPositions = findLineEnd(data, end);
if (!isBlankLine(data, lineEndPositions.lineEnd)) {
while (data < lineEndPositions.nextLineBegin) {
if (*data == DoubleQuote)
result += Backslash;
result += *data;
++data;
}
}
data = lineEndPositions.nextLineBegin;
}
result += DoubleQuote;
return result;
}
int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ignoreFormat, bool ignoreEmpty)
{
if (block.text().isEmpty() && ignoreEmpty)
@ -445,7 +514,12 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
col += s.length();
} else if (fmt.hasProperty(QTextFormat::AnchorHref)) {
QString s = QLatin1Char('[') + fragmentText + QLatin1String("](") +
fmt.property(QTextFormat::AnchorHref).toString() + QLatin1Char(')');
fmt.property(QTextFormat::AnchorHref).toString();
if (fmt.hasProperty(QTextFormat::TextToolTip)) {
s += Space;
s += createLinkTitle(fmt.property(QTextFormat::TextToolTip).toString());
}
s += QLatin1Char(')');
if (wrap && col + s.length() > ColumnLimit) {
m_stream << Newline << wrapIndentString;
col = m_wrappedLineIndent;

View File

@ -141,7 +141,7 @@ QSslPreSharedKeyAuthenticator &QSslPreSharedKeyAuthenticator::operator=(const QS
/*!
\fn QSslPreSharedKeyAuthenticator &QSslPreSharedKeyAuthenticator::operator=(QSslPreSharedKeyAuthenticator &&authenticator)
Move-assigns the the QSslPreSharedKeyAuthenticator object \a authenticator to this
Move-assigns the QSslPreSharedKeyAuthenticator object \a authenticator to this
object, and returns a reference to the moved instance.
*/

View File

@ -511,7 +511,7 @@ static void executeBlockWithoutAnimation(Block block)
- (void)createLoupe
{
// We magnify the the desktop view. But the loupe itself will be added as a child
// We magnify the desktop view. But the loupe itself will be added as a child
// of the desktop view's parent, so it doesn't become a part of what we magnify.
_loupeLayer = [[self createLoupeLayer] retain];
_loupeLayer.targetView = _desktopView;

View File

@ -452,7 +452,7 @@
if (!focusWindow->screen() || focusWindow->screen()->handle() != self.platformScreen)
return;
// All decisions are based on the the top level window
// All decisions are based on the top level window
focusWindow = qt_window_private(focusWindow)->topLevelWindow();
#ifndef Q_OS_TVOS

View File

@ -133,7 +133,7 @@ QWasmIntegration::QWasmIntegration()
Q_UNUSED(userData);
// This resize event is called when the HTML window is resized. Depending
// on the page layout the the canvas(es) might also have been resized, so we
// on the page layout the canvas(es) might also have been resized, so we
// update the Qt screen sizes (and canvas render sizes).
if (QWasmIntegration *integration = QWasmIntegration::get())
integration->resizeAllScreens();

View File

@ -52,9 +52,10 @@ QString QWasmString::toQString(const val &v)
val::global("Module")["stringToUTF16"]);
static const val length("length");
result.resize(v[length].as<int>());
int len = v[length].as<int>();
result.resize(len);
auto ptr = quintptr(result.utf16());
stringToUTF16(v, val(ptr));
stringToUTF16(v, val(ptr), val((len + 1) * 2));
return result;
}

View File

@ -250,7 +250,7 @@ static QDateTime fromTimeStamp(char *buffer)
return QDateTime(d, t);
}
static ISC_TIME toTime(const QTime &t)
static ISC_TIME toTime(QTime t)
{
static const QTime midnight(0, 0, 0, 0);
return (ISC_TIME)midnight.msecsTo(t) * 10;
@ -266,7 +266,7 @@ static QTime fromTime(char *buffer)
return t;
}
static ISC_DATE toDate(const QDate &t)
static ISC_DATE toDate(QDate t)
{
static const QDate basedate(1858, 11, 17);
ISC_DATE date;

View File

@ -48,7 +48,11 @@
**
****************************************************************************/
#include <QtGui>
#include <QtWidgets>
#include <QtPrintSupport/qtprintsupportglobal.h>
#if QT_CONFIG(printdialog)
#include <QPrinter>
#endif
int main(int argc, char **argv)
{

View File

@ -48,9 +48,14 @@
**
****************************************************************************/
#include <QtGui>
#include "object.h"
#include <QtWidgets>
#include <QtPrintSupport/qtprintsupportglobal.h>
#if QT_CONFIG(printdialog)
#include <QPrinter>
#endif
Object::Object(QObject *parent)
: QObject(parent)
{

View File

@ -48,7 +48,6 @@
**
****************************************************************************/
#include <QtGui>
#include <QtWidgets>
#include <QtPrintSupport/qtprintsupportglobal.h>
#if QT_CONFIG(printdialog)
@ -61,11 +60,12 @@ class Window : public QWidget
Q_OBJECT
public:
Window() {
Window()
{
myWidget = new QPushButton("Print Me");
connect(myWidget, SIGNAL(clicked()), this, SLOT(print()));
connect(myWidget, &QPushButton::clicked, this, &Window::print);
myWidget2 = new QPushButton("Print Document");
connect(myWidget2, SIGNAL(clicked()), this, SLOT(printFile()));
connect(myWidget2, &QPushButton::clicked, this, &Window::printFile);
editor = new QTextEdit(this);
QVBoxLayout *layout = new QVBoxLayout;
@ -76,8 +76,9 @@ public:
}
private slots:
void print() {
#if !defined(QT_NO_PRINTER)
void print()
{
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFileName("test.pdf");
@ -85,8 +86,8 @@ private slots:
//! [0]
QPainter painter;
painter.begin(&printer);
double xscale = printer.pageRect().width()/double(myWidget->width());
double yscale = printer.pageRect().height()/double(myWidget->height());
double xscale = printer.pageRect().width() / double(myWidget->width());
double yscale = printer.pageRect().height() / double(myWidget->height());
double scale = qMin(xscale, yscale);
painter.translate(printer.paperRect().x() + printer.pageRect().width()/2,
printer.paperRect().y() + printer.pageRect().height()/2);
@ -98,8 +99,9 @@ private slots:
#endif
}
void printFile() {
#if QT_CONFIG(printdialog)
void printFile()
{
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
//! [1]
QPrinter printer;

View File

@ -208,8 +208,8 @@
When you distribute your application, remember to include libmysql.dll / libmariadb.dll
in your installation package. It must be placed in the same folder
as the application executable. \e libmysql.dll additionally needs the
MSVC runtime libraries which can be installed with vcredist.exe
(\l {https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads}{vcredist.exe}
MSVC runtime libraries which can be installed with
\l {https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads}{vcredist.exe}
\target QOCI
\section2 QOCI for the Oracle Call Interface (OCI)

View File

@ -1337,7 +1337,7 @@ char *toPrettyCString(const char *p, int length)
// 3 bytes: "" and a character
// 4 bytes: an hex escape sequence (\xHH)
if (dst - buffer.data() > 246) {
// plus the the quote, the three dots and NUL, it's 255 in the worst case
// plus the quote, the three dots and NUL, it's 255 in the worst case
trimmed = true;
break;
}
@ -1430,7 +1430,7 @@ char *toPrettyUnicode(QStringView string)
*dst++ = '"';
for ( ; p != end; ++p) {
if (dst - buffer.data() > 245) {
// plus the the quote, the three dots and NUL, it's 250, 251 or 255
// plus the quote, the three dots and NUL, it's 250, 251 or 255
trimmed = true;
break;
}

View File

@ -797,7 +797,7 @@ QString QFileSystemModelPrivate::time(const QModelIndex &index) const
if (!index.isValid())
return QString();
#if QT_CONFIG(datestring)
return node(index)->lastModified().toString(Qt::SystemLocaleDate);
return QLocale::system().toString(node(index)->lastModified(), QLocale::ShortFormat);
#else
Q_UNUSED(index);
return QString();

View File

@ -1321,7 +1321,7 @@ QString QDirModelPrivate::type(const QModelIndex &index) const
QString QDirModelPrivate::time(const QModelIndex &index) const
{
#if QT_CONFIG(datestring)
return node(index)->info.lastModified().toString(Qt::LocalDate);
return QLocale::system().toString(node(index)->info.lastModified(), QLocale::ShortFormat);
#else
Q_UNUSED(index);
return QString();

View File

@ -379,7 +379,7 @@ QT_BEGIN_NAMESPACE
This is naturally not the only possible solution. One alternative is to use
the \l{QOpenGLContext::aboutToBeDestroyed()}{aboutToBeDestroyed()} signal of
QOpenGLContext. By connecting a slot, using direct connection, to this signal,
it is possible to perform cleanup whenever the the underlying native context
it is possible to perform cleanup whenever the underlying native context
handle, or the entire QOpenGLContext instance, is going to be released. The
following snippet is in principle equivalent to the previous one:

View File

@ -6309,7 +6309,7 @@ void QWidget::setFocus(Qt::FocusReason reason)
previousProxyFocus = topData->proxyWidget->widget()->focusWidget();
if (previousProxyFocus && previousProxyFocus->focusProxy())
previousProxyFocus = previousProxyFocus->focusProxy();
if (previousProxyFocus == this && !topData->proxyWidget->d_func()->proxyIsGivingFocus)
if (previousProxyFocus == f && !topData->proxyWidget->d_func()->proxyIsGivingFocus)
return;
}
}

View File

@ -2416,7 +2416,7 @@ void QFusionStyle::drawComplexControl(ComplexControl control, const QStyleOption
QStyle::State oldState = static_cast<QStyle::State>(qvariant_cast<QStyle::State::Int>(styleObject->property("_q_stylestate")));
uint oldActiveControls = styleObject->property("_q_stylecontrols").toUInt();
// a scrollbar is transient when the the scrollbar itself and
// a scrollbar is transient when the scrollbar itself and
// its sibling are both inactive (ie. not pressed/hovered/moved)
bool transient = !option->activeSubControls && !(option->state & State_On);

View File

@ -1646,7 +1646,7 @@ QStyleOptionProgressBar::QStyleOptionProgressBar(int version)
the default orentation is Qt::Horizontal
\deprecated
Use the QStyle::State_Horizontal flag instead (in the the QStyleOption::state member).
Use the QStyle::State_Horizontal flag instead (in the QStyleOption::state member).
\sa QProgressBar::orientation
*/

View File

@ -2136,7 +2136,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp
#if QT_CONFIG(combobox)
case CC_ComboBox:
if (const QStyleOptionComboBox *cmb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {
QBrush editBrush = cmb->palette.brush(QPalette::Base);
QBrush editBrush = cmb->palette.brush(QPalette::Button);
if ((cmb->subControls & SC_ComboBoxFrame)) {
if (cmb->frame) {
QPalette shadePal = opt->palette;

View File

@ -1272,6 +1272,7 @@ QString QTextEdit::toHtml() const
The default is \c MarkdownDialectGitHub.
\sa plainText, html, QTextDocument::toMarkdown(), QTextDocument::setMarkdown()
\since 5.14
*/
#endif

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@ -1869,14 +1869,16 @@ void tst_QLocale::toDateTime()
// Format number string according to system locale settings.
// Expected in format is US "1,234.56".
QString systemLocaleFormatNumber(const QString &numberString)
QString systemLocaleFormatNumber(QString &&numberString)
{
QLocale locale = QLocale::system();
QString numberStringCopy = numberString;
return numberStringCopy.replace(QChar(','), QChar('G'))
.replace(QChar('.'), QChar('D'))
.replace(QChar('G'), locale.groupSeparator())
.replace(QChar('D'), locale.decimalPoint());
QString numberStringMunged =
numberString.replace(QChar(','), QChar('G')).replace(QChar('.'), QChar('D'));
if (locale.numberOptions() & QLocale::OmitGroupSeparator)
numberStringMunged.remove(QLatin1Char('G'));
else
numberStringMunged.replace(QChar('G'), locale.groupSeparator());
return numberStringMunged.replace(QChar('D'), locale.decimalPoint());
}
void tst_QLocale::macDefaultLocale()
@ -1899,12 +1901,14 @@ void tst_QLocale::macDefaultLocale()
// independently of the locale. Verify that they have one of the
// allowed values and are not the same.
QVERIFY(locale.decimalPoint() == QChar('.') || locale.decimalPoint() == QChar(','));
QVERIFY(locale.groupSeparator() == QChar(',')
|| locale.groupSeparator() == QChar('.')
|| locale.groupSeparator() == QChar('\xA0') // no-breaking space
|| locale.groupSeparator() == QChar('\'')
|| locale.groupSeparator() == QChar());
QVERIFY(locale.decimalPoint() != locale.groupSeparator());
if (!(locale.numberOptions() & QLocale::OmitGroupSeparator)) {
QVERIFY(locale.groupSeparator() == QChar(',')
|| locale.groupSeparator() == QChar('.')
|| locale.groupSeparator() == QChar('\xA0') // no-breaking space
|| locale.groupSeparator() == QChar('\'')
|| locale.groupSeparator() == QChar());
QVERIFY(locale.decimalPoint() != locale.groupSeparator());
}
// make sure we are using the system to parse them
QCOMPARE(locale.toString(1234.56), systemLocaleFormatNumber(QString("1,234.56")));

View File

@ -0,0 +1,25 @@
A series of links.
[link](/uri)
[link]()
[link](/uri "title")
[link](/uri "àbcdè")
[link](/uri "title title \" title title")
[link](/url "title \"&quot;")
[link](/url "title
title
title title
\"title\" title \"
title")
* [link](/url "title")
* [link](/url)
* [link](/url "title
title title")
* nonlink

View File

@ -368,6 +368,7 @@ void tst_QTextMarkdownWriter::rewriteDocument_data()
QTest::newRow("example") << "example.md";
QTest::newRow("list items after headings") << "headingsAndLists.md";
QTest::newRow("word wrap") << "wordWrap.md";
QTest::newRow("links") << "links.md";
}
void tst_QTextMarkdownWriter::rewriteDocument()

View File

@ -1,3 +1,4 @@
# QTBUG-74760
[sorting]
opensuse-42.3
osx

View File

@ -89,6 +89,7 @@ private slots:
void focusNextPrevChild();
void focusOutEvent_data();
void focusOutEvent();
void focusProxy_QTBUG_51856();
void hoverEnterLeaveEvent_data();
void hoverEnterLeaveEvent();
void hoverMoveEvent_data();
@ -864,6 +865,75 @@ void tst_QGraphicsProxyWidget::focusOutEvent()
}
}
void tst_QGraphicsProxyWidget::focusProxy_QTBUG_51856()
{
// QSpinBox has an internal QLineEdit; this QLineEdit has the spinbox
// as its focus proxy.
struct FocusedSpinBox : QSpinBox
{
int focusCount = 0;
bool event(QEvent *event) override
{
switch (event->type()) {
case QEvent::FocusIn:
++focusCount;
break;
case QEvent::FocusOut:
--focusCount;
break;
default:
break;
}
return QSpinBox::event(event);
}
};
QGraphicsScene scene;
QGraphicsView view(&scene);
SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget;
scene.addItem(proxy);
view.show();
view.raise();
view.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
FocusedSpinBox *spinBox = new FocusedSpinBox;
proxy->setWidget(spinBox);
proxy->show();
proxy->setFocus();
QVERIFY(proxy->hasFocus());
QEXPECT_FAIL("", "Widget should have focus but doesn't", Continue);
QVERIFY(spinBox->hasFocus());
QEXPECT_FAIL("", "Widget should have focus but doesn't", Continue);
QCOMPARE(spinBox->focusCount, 1);
enum { Count = 10 };
for (int i = 0; i < Count; ++i) {
for (int clickCount = 0; clickCount < Count; ++clickCount) {
auto proxyCenter = proxy->boundingRect().center();
auto proxyCenterInScene = proxy->mapToScene(proxyCenter);
auto proxyCenterInView = view.mapFromScene(proxyCenterInScene);
QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, proxyCenterInView);
QTRY_COMPARE(spinBox->focusCount, 1);
}
QLineEdit *edit = new QLineEdit(&view);
edit->show();
QTRY_VERIFY(edit->isVisible());
edit->setFocus();
QTRY_VERIFY(edit->hasFocus());
QTRY_VERIFY(!proxy->hasFocus());
QTRY_COMPARE(proxy->focusOut, i + 1);
QTRY_VERIFY(!spinBox->hasFocus());
QTRY_COMPARE(spinBox->focusCount, 0);
delete edit;
}
}
class EventLogger : public QWidget
{
public:

View File

@ -16,3 +16,5 @@ opensuse-42.3
[itemsInRect_cosmeticAdjust]
# QTBUG-66815
ubuntu-16.04
[fitInView]
osx

View File

@ -94,13 +94,13 @@ void CalendarWidget::selectedDateChanged()
currentDateEdit->setDate(calendar->selectedDate());
}
void CalendarWidget::minimumDateChanged(const QDate &date)
void CalendarWidget::minimumDateChanged(QDate date)
{
calendar->setMinimumDate(date);
maximumDateEdit->setDate(calendar->maximumDate());
}
void CalendarWidget::maximumDateChanged(const QDate &date)
void CalendarWidget::maximumDateChanged(QDate date)
{
calendar->setMaximumDate(date);
minimumDateEdit->setDate(calendar->minimumDate());

View File

@ -55,8 +55,8 @@ private slots:
void horizontalHeaderChanged(int index);
void verticalHeaderChanged(int index);
void selectedDateChanged();
void minimumDateChanged(const QDate &date);
void maximumDateChanged(const QDate &date);
void minimumDateChanged(QDate date);
void maximumDateChanged(QDate date);
void updateWeekendDays();
void weekdayFormatChanged();
void weekendFormatChanged();

View File

@ -184,7 +184,7 @@ void CodeGenerator::writeCoreFactoryImplementation(const QString &fileName) cons
// Get the set of version functions classes we need to create
QList<Version> versions = m_parser->versions();
std::sort(m_versions.begin(), m_versions.end(), std::greater<Version>());
std::sort(versions.begin(), versions.end(), std::greater<Version>());
// Outout the #include statements
stream << QStringLiteral("#if !defined(QT_OPENGL_ES_2)") << endl;

View File

@ -305,6 +305,7 @@ def _generateLocaleInfo(path, language_code, script_code, country_code, variant_
result['decimal'] = get_number_in_system(path, "numbers/symbols/decimal", numbering_system)
result['group'] = get_number_in_system(path, "numbers/symbols/group", numbering_system)
assert result['decimal'] != result['group']
result['list'] = get_number_in_system(path, "numbers/symbols/list", numbering_system)
result['percent'] = get_number_in_system(path, "numbers/symbols/percentSign", numbering_system)
try: