Из вашего примера кода выглядит, что Array.prototype.find
- это то, что вы ищете: Array.prototype.find () и Array.prototype.findIndex ()
[1, 2, 3].find(function(el) {
return el === 2;
}); // returns 2
Для случая QTextBrowser вы должны иметь возможность получить размер документа, используя
QTextBrowser::document()->size();
после установки html, а затем изменить его размер QTextBrowser впоследствии.
Джон, проблема в том, что ваш запрос построен так, что он выбирает из производной таблицы. Производная таблица не может получить выгоду от ваших индексов. Попробуйте обновить свой запрос следующим образом:
SELECT
Parts.*,
Image.type, Image.width, Image.height,
Location_State.name AS state,
Location_Region.name AS region,
Promotion.start_date AS promotion_start_date,
Promotion.end_date AS promotion_end_date
FROM Parts
LEFT JOIN Image ON Parts.image_id = Image.id
LEFT JOIN Location_State ON Parts.state_id = Location_State.id
LEFT JOIN Location_Region ON Parts.state_id = Location_Region.id
LEFT JOIN Promotion ON Parts.promotion_id = Promotion.id
INNER JOIN Parts_Category ON (Parts_Category.category_id = 40 OR Parts_Category.main_category_id = 40)
WHERE Parts.status = 'A'
GROUP BY Parts.id
ORDER BY Parts.level DESC, Parts.warehouse DESC, Parts.updated DESC LIMIT 0, 15
Обратите внимание: если вам не нужны LEFT JOIN для таблиц Location_State, Location_Region, Promotion, используйте вместо этого INNER JOIN. Скорее всего, он будет работать лучше.
Чтобы еще больше помочь в оптимизации этого запроса, предоставьте следующее: заключается в том, что sizeHint ()
не изменяется при добавлении текста в QLineEdit
и QTextEdit
. По какой-то причине: люди не ожидают, что их диалоги будут расти по мере того, как они набирают:)
Тем не менее, если вы действительно хотите, чтобы поведение этих виджетов росло по мере того, как вы печатали, вам нужно унаследовать от них и повторно реализовать sizeHint ()
и minimumSizeHint ()
, чтобы вернуть больший размер, и потенциально setText ()
, append ()
и т. Д. Для вызова updateGeometry ()
, чтобы было замечено изменение sizehint.
Расчет sizehint не будет совсем тривиальным и будет намного проще для QLineEdit
, чем для QTextEdit
] (который тайно является QAbstractScrollArea
), AdjustToContents .
РЕДАКТИРОВАТЬ: ваши два варианта использования (QTextBrowser без полос прокрутки и QLineEdit вместо QLabel только для выделения текста) могут быть решены с помощью QLabel и достаточно свежей версии Qt. QLabel получил как уведомление о щелчке по ссылке, так и так называемые «флаги текстового взаимодействия» (один из которых - TextSelectableByMouse) в Qt 4.2. Единственное отличие, которое я смог различить, заключается в том, что загрузка нового контента не происходит автоматически, нет истории и нет подсказок по микро фокусу (то есть переход от ссылки к ссылке) в QLabel.
AdjustToContents .РЕДАКТИРОВАТЬ: ваши два варианта использования (QTextBrowser без полос прокрутки и QLineEdit вместо QLabel только для выбора текста) могут быть решены с помощью QLabel и достаточно свежей версии Qt. QLabel получил как уведомление о щелчке по ссылке, так и так называемые «флаги текстового взаимодействия» (один из которых - TextSelectableByMouse) в Qt 4.2. Единственное отличие, которое я смог различить, заключается в том, что загрузка нового контента не происходит автоматически, нет истории и нет подсказок по микро фокусу (то есть переход от ссылки к ссылке) в QLabel.
(одним из которых является TextSelectableByMouse) в Qt 4.2. Единственное отличие, которое я смог различить, заключается в том, что загрузка нового контента не происходит автоматически, нет истории и нет подсказок по микро фокусу (то есть переход от ссылки к ссылке) в QLabel. (одним из которых является TextSelectableByMouse) в Qt 4.2. Единственное отличие, которое я смог различить, заключается в том, что загрузка нового контента не происходит автоматически, нет истории и нет подсказок по микро фокусу (то есть переход от ссылки к ссылке) в QLabel.Я добиваюсь аналогичного эффекта, используя следующий класс C ++:
#ifndef TEXTEDIT_H
#define TEXTEDIT_H
#include <QTextEdit>
class TextEdit : public QTextEdit
{
Q_DISABLE_COPY( TextEdit )
public:
TextEdit( QWidget* parent = NULL );
TextEdit( const QString& text, QWidget* parent = NULL );
virtual ~TextEdit();
void fitToDocument( Qt::Orientations orientations );
virtual QSize sizeHint() const;
private:
int fittedHeight_;
Qt::Orientations fittedOrientations_;
int fittedWidth_;
};
#include "textedit-inl.h"
#endif // TEXTEDIT_H
#ifndef TEXTEDITINL_H
#define TEXTEDITINL_H
#include "textedit.h"
inline TextEdit::TextEdit( QWidget* parent ) :
QTextEdit( parent ), fittedOrientations_( 0 )
{ }
inline TextEdit::TextEdit( const QString& text, QWidget* parent ) :
QTextEdit( text, parent ), fittedOrientations_( 0 )
{ }
inline TextEdit::~TextEdit()
{ }
inline QSize TextEdit::sizeHint() const
{
QSize sizeHint = QTextEdit::sizeHint();
if( fittedOrientations_ & Qt::Horizontal )
sizeHint.setWidth( fittedWidth_ );
if( fittedOrientations_ & Qt::Vertical )
sizeHint.setHeight( fittedHeight_ );
return sizeHint;
}
#endif // TEXTEDITINL_H
#include "textedit.h"
void TextEdit::fitToDocument( Qt::Orientations orientations )
{
QSize documentSize( document()->size().toSize() );
QSizePolicy sizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
if( orientations & Qt::Horizontal ) {
fittedWidth_ = documentSize.width() + (width() - viewport()->width());
sizePolicy.setHorizontalPolicy( QSizePolicy::Fixed );
}
if( orientations & Qt::Vertical ) {
fittedHeight_ = documentSize.height() + (width() - viewport()->width());
sizePolicy.setVerticalPolicy( QSizePolicy::Fixed );
}
fittedOrientations_ = orientations;
setSizePolicy( sizePolicy );
updateGeometry();
}
, например, вызывая TextEdit :: fitToDocument (Qt :: Horizontal)
установит ширину виджета на фиксированную ширину, достаточно большую, чтобы поместиться в документ и его окружение (например, вертикальная полоса прокрутки, если она есть). если ваша цель состоит в том, чтобы это происходило при каждом изменении содержимого, подключите сигнал QTextEdit :: textChanged ()
к слоту, который вызывает TextEdit :: fitToDocument ()
.
как для вашей проблемы с QLabel
решение простое: вызовите QLabel :: setTextInteractionFlags (Qt :: LinksAccessibleByMouse | Qt :: TextSelectableByMouse)
.
Хорошо, реализуйте метод sizeHint ()
. И каждый раз, когда размер вашего контента изменяется, вызывайте updateGeometry ()
При изменении содержимого без изменения размера используйте update ()
. ( updateGeometry ()
автоматически вызывает update ()
).