Doc: Fix broken links
Task-number: QTBUG-33360 Change-Id: Ic944cb2f575c35ebad64852ef5fc44a50ac03571 Reviewed-by: Jerome Pasion <jerome.pasion@digia.com> Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
This commit is contained in:
parent
6b8e866391
commit
16198d963d
@ -42,8 +42,9 @@
|
||||
|
||||
\section1 Overview
|
||||
|
||||
In the \l{Custom Type Sending Example}, we showed how to use a custom type
|
||||
with signal-slot communication within the same thread.
|
||||
In the \l{Custom Type Example}, we showed how to integrate custom types with
|
||||
the meta-object system, enabling them to be stored in QVariant objects, written
|
||||
out in debugging information and used in signal-slot communication.
|
||||
|
||||
In this example, we create a new value class, \c Block, and register it
|
||||
with the meta-object system to enable us to send instances of it between
|
||||
@ -152,7 +153,7 @@
|
||||
meta-object system so that it can be used with signal-slot connections
|
||||
between threads. For ordinary communication involving direct signals and
|
||||
slots, it is enough to simply declare the type in the way described in the
|
||||
\l{Custom Type Sending Example}.
|
||||
\l{Custom Type Example}.
|
||||
|
||||
In practice, both the Q_DECLARE_METATYPE() macro and the qRegisterMetaType()
|
||||
template function can be used to register custom types, but
|
||||
|
@ -54,7 +54,7 @@
|
||||
|
||||
An alternative to using QSemaphore to solve the producer-consumer
|
||||
problem is to use QWaitCondition and QMutex. This is what the
|
||||
\l{threads/waitconditions}{Wait Conditions} example does.
|
||||
\l{Wait Conditions Example} does.
|
||||
|
||||
\section1 Global Variables
|
||||
|
||||
|
@ -54,7 +54,7 @@
|
||||
|
||||
An alternative to using QWaitCondition and QMutex to solve the
|
||||
producer-consumer problem is to use QSemaphore. This is what the
|
||||
\l{threads/semaphores}{Semaphores} example does.
|
||||
\l{Semaphores Example} does.
|
||||
|
||||
\section1 Global Variables
|
||||
|
||||
|
@ -132,8 +132,8 @@
|
||||
\section1 Further Reading
|
||||
|
||||
The custom \c Message type can also be used with direct signal-slot
|
||||
connections; see the \l{Custom Type Sending Example} for a demonstration
|
||||
of this.
|
||||
connections.
|
||||
|
||||
To register a custom type for use with queued signals and slots, such as
|
||||
those used in cross-thread communication, see the
|
||||
\l{Queued Custom Type Example}.
|
||||
|
@ -32,8 +32,8 @@
|
||||
\brief Demonstrates how to create animated user interface
|
||||
|
||||
The Pad Navigator Example shows how you can use Graphics View together with
|
||||
embedded widgets and Qt's \l{State Machine Framework} to create a simple
|
||||
but useful, dynamic, animated user interface.
|
||||
embedded widgets and Qt's \l{The State Machine Framework}{state machine
|
||||
framework} to create a simple but useful, dynamic, animated user interface.
|
||||
|
||||
\image padnavigator-example.png
|
||||
|
||||
|
@ -42,8 +42,8 @@
|
||||
time has passed, it sends a QTimerEvent to a QObject of our
|
||||
choice. This makes QBasicTimer a more lightweight alternative to
|
||||
QTimer. Qt's built-in widgets use it internally, and it is
|
||||
provided in Qt's API for highly-optimized applications (e.g.,
|
||||
\l{Qt for Embedded Linux} applications).
|
||||
provided in Qt's API for highly-optimized applications (such as
|
||||
embedded applications).
|
||||
|
||||
The example consists of two classes:
|
||||
|
||||
|
@ -303,8 +303,6 @@ QPauseAnimation *QSequentialAnimationGroup::insertPause(int index, int msecs)
|
||||
/*!
|
||||
\property QSequentialAnimationGroup::currentAnimation
|
||||
Returns the animation in the current time.
|
||||
|
||||
\sa currentAnimationChanged()
|
||||
*/
|
||||
QAbstractAnimation *QSequentialAnimationGroup::currentAnimation() const
|
||||
{
|
||||
|
@ -155,10 +155,9 @@
|
||||
The Q_DECLARE_METATYPE() macro and qRegisterMetaType() function documentation
|
||||
contain more detailed information about their uses and limitations.
|
||||
|
||||
The \l{Custom Type Example}{Custom Type},
|
||||
\l{Custom Type Sending Example}{Custom Type Sending}
|
||||
and \l{Queued Custom Type Example}{Queued Custom Type} examples show how to
|
||||
implement a custom type with the features outlined in this document.
|
||||
The \l{Custom Type Example}{Custom Type} and \l{Queued Custom Type Example}
|
||||
{Queued Custom Type} examples show how to implement a custom type with the
|
||||
features outlined in this document.
|
||||
|
||||
The \l{Debugging Techniques} document provides an overview of the debugging
|
||||
mechanisms discussed above.
|
||||
|
@ -46,7 +46,8 @@
|
||||
\li queryable and designable \l{Qt's Property System}{object
|
||||
properties}
|
||||
\li powerful \l{The Event System}{events and event filters}
|
||||
\li contextual \l{i18n}{string translation for internationalization}
|
||||
\li contextual \l{Internationalization with Qt}{string translation for
|
||||
internationalization}
|
||||
\li sophisticated interval driven \l {Timers}{timers} that make it possible
|
||||
to elegantly integrate many tasks in an event-driven GUI
|
||||
\li hierarchical and queryable \l{Object Trees & Ownership}{object
|
||||
|
@ -275,7 +275,7 @@
|
||||
and slot members, as well as pointers to these functions.
|
||||
|
||||
The meta-object contains additional information such as the
|
||||
object's \l{QObject::className()}{class name}. You can
|
||||
object's \l{QMetaObject::className()}{class name}. You can
|
||||
also check if an object \l{QObject::inherits()}{inherits}
|
||||
a specific class, for example:
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
See the \l{How to Create Qt Plugins} page for more information..
|
||||
|
||||
See also the \l{ActiveQt framework} for Windows.
|
||||
See also the \l{Active Qt} framework for Windows.
|
||||
|
||||
*/
|
||||
|
||||
|
@ -606,7 +606,7 @@
|
||||
putting time-consuming operations in a separate worker thread and
|
||||
displaying the results on screen in the main thread when the
|
||||
worker thread is finished. This is the approach used for
|
||||
implementing the \l{threads/mandelbrot}{Mandelbrot} and
|
||||
implementing the \l{Mandelbrot Example} and
|
||||
the \l{network/blockingfortuneclient}{Blocking Fortune Client}
|
||||
example.
|
||||
|
||||
@ -738,7 +738,7 @@
|
||||
|
||||
QObject::connect() itself is thread-safe.
|
||||
|
||||
The \l{threads/mandelbrot}{Mandelbrot} example uses a queued
|
||||
The \l{Mandelbrot Example} uses a queued
|
||||
connection to communicate between a worker thread and the main
|
||||
thread. To avoid freezing the main thread's event loop (and, as a
|
||||
consequence, the application's user interface), all the
|
||||
|
@ -310,8 +310,6 @@ const qreal qt_sine_table[QT_SINE_TABLE_SIZE] = {
|
||||
|
||||
\brief The <QtMath> header file includes generic math declarations.
|
||||
|
||||
The global declarations include \l{functions}.
|
||||
|
||||
These functions are partly convenience definitions for basic
|
||||
operations, for instance not available in the Standard Template Library et
|
||||
al.
|
||||
|
@ -566,7 +566,7 @@ void QMetaCallEvent::placeMetaCall(QObject *object)
|
||||
\li When a QObject is moved to another thread, all its children
|
||||
will be automatically moved too.
|
||||
\li moveToThread() will fail if the QObject has a parent.
|
||||
\li If \l{QObject}s are created within QThread::run(), they cannot
|
||||
\li If QObjects are created within QThread::run(), they cannot
|
||||
become children of the QThread object because the QThread does
|
||||
not live in the thread that calls QThread::run().
|
||||
\endlist
|
||||
@ -4622,7 +4622,7 @@ bool QObjectPrivate::disconnect(const QObject *sender, int signal_index, void **
|
||||
It can be used to disconnect that connection, or check if
|
||||
the connection was successful
|
||||
|
||||
\sa QObject::disconnect
|
||||
\sa QObject::disconnect()
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -455,8 +455,8 @@ const QString::Null QString::null = { };
|
||||
your applications will be easy to translate if you want to expand
|
||||
your application's market at some point. The two main cases where
|
||||
QByteArray is appropriate are when you need to store raw binary
|
||||
data, and when memory conservation is critical (e.g., with
|
||||
\l{Qt for Embedded Linux}).
|
||||
data, and when memory conservation is critical (like in embedded
|
||||
systems).
|
||||
|
||||
\tableofcontents
|
||||
|
||||
@ -5039,7 +5039,7 @@ int QString::compare_helper(const QChar *data1, int length1, QLatin1String s2,
|
||||
On Mac OS X since Qt 4.3, this function compares according the
|
||||
"Order for sorted lists" setting in the International preferences panel.
|
||||
|
||||
\sa compare(), QTextCodec::locale()
|
||||
\sa compare(), QLocale
|
||||
*/
|
||||
|
||||
/*!
|
||||
@ -8450,7 +8450,7 @@ QStringRef QStringRef::appendTo(QString *string) const
|
||||
On Mac OS X, this function compares according the
|
||||
"Order for sorted lists" setting in the International prefereces panel.
|
||||
|
||||
\sa compare(), QTextCodec::locale()
|
||||
\sa compare(), QLocale
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -572,7 +572,7 @@
|
||||
|
||||
Provided for compatibility with QList.
|
||||
|
||||
\sa remove(int), QList::removeAt(int)
|
||||
\sa remove(), QList::removeAt()
|
||||
*/
|
||||
|
||||
/*! \fn int QVector::length() const
|
||||
@ -597,7 +597,7 @@
|
||||
|
||||
Provided for compatibility with QList.
|
||||
|
||||
\sa takeFirst(), takeLast(), QList::takeAt(int)
|
||||
\sa takeFirst(), takeLast(), QList::takeAt()
|
||||
*/
|
||||
|
||||
/*! \fn void QVector::removeFirst()
|
||||
|
@ -3989,7 +3989,7 @@ void qGamma_correct_back_to_linear_cs(QImage *image)
|
||||
The specified image conversion \a flags control how the image data
|
||||
is handled during the conversion process.
|
||||
|
||||
\sa {QImage#Image Format}{Image Format}
|
||||
\sa {Image Formats}
|
||||
*/
|
||||
QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) const
|
||||
{
|
||||
|
@ -118,7 +118,7 @@ QInputEvent::~QInputEvent()
|
||||
Returns the keyboard modifier flags that existed immediately
|
||||
before the event occurred.
|
||||
|
||||
\sa QApplication::keyboardModifiers()
|
||||
\sa QGuiApplication::keyboardModifiers()
|
||||
*/
|
||||
|
||||
/*! \fn void QInputEvent::setModifiers(Qt::KeyboardModifiers modifiers)
|
||||
@ -313,7 +313,7 @@ QMouseEvent::~QMouseEvent()
|
||||
Returns the position of the mouse cursor as a QPointF, relative to the
|
||||
screen that received the event.
|
||||
|
||||
\sa x(), y(), pos(), localPos(), screenPos()
|
||||
\sa x(), y(), pos(), localPos(), windowPos()
|
||||
*/
|
||||
|
||||
/*!
|
||||
@ -1005,7 +1005,7 @@ QKeyEvent::~QKeyEvent()
|
||||
confuse it by pressing both \uicontrol{Shift} keys simultaneously and
|
||||
releasing one of them, for example.
|
||||
|
||||
\sa QApplication::keyboardModifiers()
|
||||
\sa QGuiApplication::keyboardModifiers()
|
||||
*/
|
||||
|
||||
Qt::KeyboardModifiers QKeyEvent::modifiers() const
|
||||
@ -1357,7 +1357,7 @@ QResizeEvent::~QResizeEvent()
|
||||
signal when they are deleted.
|
||||
|
||||
If the last top-level window is closed, the
|
||||
QApplication::lastWindowClosed() signal is emitted.
|
||||
QGuiApplication::lastWindowClosed() signal is emitted.
|
||||
|
||||
The isAccepted() function returns \c true if the event's receiver has
|
||||
agreed to close the widget; call accept() to agree to close the
|
||||
@ -1366,7 +1366,7 @@ QResizeEvent::~QResizeEvent()
|
||||
|
||||
\sa QWidget::close(), QWidget::hide(), QObject::destroyed(),
|
||||
QCoreApplication::exec(), QCoreApplication::quit(),
|
||||
QApplication::lastWindowClosed()
|
||||
QGuiApplication::lastWindowClosed()
|
||||
*/
|
||||
|
||||
/*!
|
||||
@ -2676,9 +2676,8 @@ QDragEnterEvent::~QDragEnterEvent()
|
||||
is within its boundaries, if it accepts
|
||||
\l{QWidget::setAcceptDrops()}{drop events} and \l
|
||||
{QWidget::dragEnterEvent()}{enter events}. The widget should
|
||||
examine the event to see what kind of data it
|
||||
\l{QDragMoveEvent::provides()}{provides}, and call the accept()
|
||||
function to accept the drop if appropriate.
|
||||
examine the event to see what kind of \l{mimeData()}{data} it
|
||||
provides, and call the accept() function to accept the drop if appropriate.
|
||||
|
||||
The rectangle supplied by the answerRect() function can be used to restrict
|
||||
drops to certain parts of the widget. For example, we can check whether the
|
||||
|
@ -274,7 +274,7 @@ QMutex QOpenGLContextPrivate::makeCurrentTrackerMutex;
|
||||
or OpenGL ES 1.x.
|
||||
|
||||
For more information about the OpenGL API, refer to the official
|
||||
\l{OpenGL documentation}.
|
||||
\l{http://www.opengl.org}{OpenGL documentation}.
|
||||
|
||||
For an example of how to use QOpenGLContext see the
|
||||
\l{OpenGL Window Example}{OpenGL Window} example.
|
||||
@ -591,6 +591,8 @@ QOpenGLFunctions *QOpenGLContext::functions() const
|
||||
/*!
|
||||
\fn T *QOpenGLContext::versionFunctions() const
|
||||
|
||||
\overload versionFunctions()
|
||||
|
||||
Returns a pointer to an object that provides access to all functions for
|
||||
the version and profile of this context. Before using any of the functions
|
||||
they must be initialized by calling QAbstractOpenGLFunctions::initializeOpenGLFunctions().
|
||||
@ -640,8 +642,6 @@ QOpenGLFunctions *QOpenGLContext::functions() const
|
||||
|
||||
Usually one would use the template version of this function to automatically
|
||||
have the result cast to the correct type.
|
||||
|
||||
\sa T *QOpenGLContext::versionFunctions()
|
||||
*/
|
||||
QAbstractOpenGLFunctions *QOpenGLContext::versionFunctions(const QOpenGLVersionProfile &versionProfile) const
|
||||
{
|
||||
|
@ -130,7 +130,7 @@ QPlatformSystemTrayIcon::~QPlatformSystemTrayIcon()
|
||||
const QIcon &icon, MessageIcon iconType, int secs)
|
||||
Shows a balloon message for the entry with the given \a title, message \a msg and \a icon for
|
||||
the time specified in \a secs. \a iconType is used as a hint for the implementing platform.
|
||||
\sa QSystemTrayIcon::showMessage
|
||||
\sa QSystemTrayIcon::showMessage()
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -396,7 +396,7 @@ bool QSurfaceFormat::hasAlpha() const
|
||||
/*!
|
||||
Set the preferred stencil buffer size to \a size bits.
|
||||
|
||||
\sa stencilBufferSize(), setStencil(), stencil()
|
||||
\sa stencilBufferSize()
|
||||
*/
|
||||
void QSurfaceFormat::setStencilBufferSize(int size)
|
||||
{
|
||||
@ -409,7 +409,7 @@ void QSurfaceFormat::setStencilBufferSize(int size)
|
||||
/*!
|
||||
Returns the stencil buffer size in bits.
|
||||
|
||||
\sa stencil(), setStencil(), setStencilBufferSize()
|
||||
\sa setStencilBufferSize()
|
||||
*/
|
||||
int QSurfaceFormat::stencilBufferSize() const
|
||||
{
|
||||
|
@ -1825,7 +1825,7 @@ void QOpenGLTexture::setSize(int width, int height, int depth)
|
||||
/*!
|
||||
Returns the width of a 1D, 2D or 3D texture.
|
||||
|
||||
\sa height(), depth(), setDimensions()
|
||||
\sa height(), depth(), setSize()
|
||||
*/
|
||||
int QOpenGLTexture::width() const
|
||||
{
|
||||
@ -1836,7 +1836,7 @@ int QOpenGLTexture::width() const
|
||||
/*!
|
||||
Returns the height of a 2D or 3D texture.
|
||||
|
||||
\sa width(), depth(), setDimensions()
|
||||
\sa width(), depth(), setSize()
|
||||
*/
|
||||
int QOpenGLTexture::height() const
|
||||
{
|
||||
@ -1847,7 +1847,7 @@ int QOpenGLTexture::height() const
|
||||
/*!
|
||||
Returns the depth of a 3D texture.
|
||||
|
||||
\sa width(), height(), setDimensions()
|
||||
\sa width(), height(), setSize()
|
||||
*/
|
||||
int QOpenGLTexture::depth() const
|
||||
{
|
||||
@ -1913,7 +1913,7 @@ int QOpenGLTexture::mipLevels() const
|
||||
Returns the maximum number of mipmap levels that this texture
|
||||
can have given the current dimensions.
|
||||
|
||||
\sa setMipLevels(), mipLevels(), setDimensions()
|
||||
\sa setMipLevels(), mipLevels(), setSize()
|
||||
*/
|
||||
int QOpenGLTexture::maximumMipLevels() const
|
||||
{
|
||||
@ -2018,7 +2018,7 @@ void QOpenGLTexture::allocateStorage()
|
||||
The texture format, dimensions, mipmap levels and array layers
|
||||
cannot be altered once storage ihas been allocated.
|
||||
|
||||
\sa allocateStorage(), setDimensions(), setMipLevels(), setLayers(), setFormat()
|
||||
\sa allocateStorage(), setSize(), setMipLevels(), setLayers(), setFormat()
|
||||
*/
|
||||
bool QOpenGLTexture::isStorageAllocated() const
|
||||
{
|
||||
@ -2367,7 +2367,7 @@ void QOpenGLTexture::setMipLevelRange(int baseLevel, int maxLevel)
|
||||
/*!
|
||||
Returns the range of mipmap levels that can be used for texture lookups with this texture.
|
||||
|
||||
\sa mipBaseLevel(), mipMaxLevel(), mipLevelRange()
|
||||
\sa mipBaseLevel(), mipMaxLevel()
|
||||
*/
|
||||
QPair<int, int> QOpenGLTexture::mipLevelRange() const
|
||||
{
|
||||
|
@ -503,7 +503,7 @@ QBrush::QBrush(Qt::GlobalColor color, Qt::BrushStyle style)
|
||||
The style is set to Qt::TexturePattern. The color will only have
|
||||
an effect for QBitmaps.
|
||||
|
||||
\sa setColor(), setPixmap()
|
||||
\sa setColor(), setTexture()
|
||||
*/
|
||||
|
||||
QBrush::QBrush(const QColor &color, const QPixmap &pixmap)
|
||||
@ -520,7 +520,7 @@ QBrush::QBrush(const QColor &color, const QPixmap &pixmap)
|
||||
The style is set to Qt::TexturePattern. The color will only have
|
||||
an effect for QBitmaps.
|
||||
|
||||
\sa setColor(), setPixmap()
|
||||
\sa setColor(), setTexture()
|
||||
*/
|
||||
QBrush::QBrush(Qt::GlobalColor color, const QPixmap &pixmap)
|
||||
{
|
||||
|
@ -308,9 +308,9 @@ QRasterPaintEnginePrivate::QRasterPaintEnginePrivate() :
|
||||
of painting operations in Qt for Embedded Linux.
|
||||
|
||||
Note that this functionality is only available in
|
||||
\l{Qt for Embedded Linux}.
|
||||
Qt for Embedded Linux.
|
||||
|
||||
In \l{Qt for Embedded Linux}, painting is a pure software
|
||||
In Qt for Embedded Linux, painting is a pure software
|
||||
implementation. But starting with Qt 4.2, it is
|
||||
possible to add an accelerated graphics driver to take advantage
|
||||
of available hardware resources.
|
||||
@ -318,19 +318,15 @@ QRasterPaintEnginePrivate::QRasterPaintEnginePrivate() :
|
||||
Hardware acceleration is accomplished by creating a custom screen
|
||||
driver, accelerating the copying from memory to the screen, and
|
||||
implementing a custom paint engine accelerating the various
|
||||
painting operations. Then a custom paint device (derived from the
|
||||
QCustomRasterPaintDevice class) and a custom window surface
|
||||
(derived from QWSWindowSurface) must be implemented to make
|
||||
\l{Qt for Embedded Linux} aware of the accelerated driver.
|
||||
painting operations. Then a custom paint device and a custom
|
||||
window surface must be implemented to make
|
||||
Qt for Embedded Linux aware of the accelerated driver.
|
||||
|
||||
\note The QRasterPaintEngine class does not support 8-bit images.
|
||||
Instead, they need to be converted to a supported format, such as
|
||||
QImage::Format_ARGB32_Premultiplied.
|
||||
|
||||
See the \l {Adding an Accelerated Graphics Driver to Qt for Embedded Linux}
|
||||
documentation for details.
|
||||
|
||||
\sa QCustomRasterPaintDevice, QPaintEngine
|
||||
\sa QPaintEngine
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -1587,7 +1587,7 @@ QRectF QFontMetricsF::boundingRect(const QRectF &rect, int flags, const QString&
|
||||
\li Qt::TextWordBreak breaks the text to fit the rectangle.
|
||||
\endlist
|
||||
|
||||
These flags are defined in \l{Qt::TextFlags}.
|
||||
These flags are defined in the \l{Qt::TextFlag} enum.
|
||||
|
||||
If Qt::TextExpandTabs is set in \a flags, the following behavior is
|
||||
used to interpret tab characters in the text:
|
||||
|
@ -3041,7 +3041,7 @@ bool QGLContext::areSharing(const QGLContext *context1, const QGLContext *contex
|
||||
If this context is a valid context in an overlay plane, returns
|
||||
the plane's transparent color. Otherwise returns an \l{QColor::isValid()}{invalid} color.
|
||||
|
||||
The returned color's \l{QColor::pixel()}{pixel} value is
|
||||
The returned color's \l{QColormap::pixel()}{pixel} value is
|
||||
the index of the transparent color in the colormap of the overlay
|
||||
plane. (Naturally, the color's RGB values are meaningless.)
|
||||
|
||||
|
@ -671,7 +671,7 @@ void QSqlRelationalTableModel::clear()
|
||||
\value InnerJoin - Inner join mode, return rows when there is at least one match in both tables.
|
||||
\value LeftJoin - Left join mode, returns all rows from the left table (table_name1), even if there are no matches in the right table (table_name2).
|
||||
|
||||
\sa QSqlRelationalTableModel::setJoinMode
|
||||
\sa QSqlRelationalTableModel::setJoinMode()
|
||||
\since 4.8
|
||||
*/
|
||||
|
||||
|
@ -32,8 +32,8 @@
|
||||
\brief A tour of the standard layout managers and an introduction to custom
|
||||
layouts.
|
||||
|
||||
\previouspage Widgets and Layouts
|
||||
\contentspage Widgets and Layouts
|
||||
\previouspage Qt Widgets
|
||||
\contentspage Qt Widgets
|
||||
\nextpage {Styles and Style Aware Widgets}{Styles}
|
||||
|
||||
\ingroup frameworks-technologies
|
||||
|
@ -89,7 +89,7 @@
|
||||
|
||||
\section1 Real world widget examples
|
||||
|
||||
In these \l{Widget examples} {more advanced examples}, the code
|
||||
In these \l{Qt Widgets Examples} {more advanced examples}, the code
|
||||
that creates the widgets and layouts is stored in other files. For
|
||||
example, the GUI for a main window may be created in the
|
||||
constructor of a QMainWindow subclass.
|
||||
|
Loading…
Reference in New Issue
Block a user