Russian Qt Forum
Мая 25, 2025, 00:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Дополнение символами QLabel [РЕШЕНО]  (Прочитано 4318 раз)
spirits25
Гость
« : Мая 29, 2012, 11:20 »

Необходимо забить всё пустое пространство QLabel точками. должно быть как содержание в книге http://www.aov.ru/images/Bigpic/33_600.gif, то есть строки разные, но после последнего символа всё пустое пространство занимают точки. Как это реализовать?
« Последнее редактирование: Июня 07, 2012, 08:11 от spirits25 » Записан
V1KT0P
Гость
« Ответ #1 : Мая 29, 2012, 11:28 »

Необходимо забить всё пустое пространство QLabel точками. должно быть как содержание в книге http://www.aov.ru/images/Bigpic/33_600.gif, то есть строки разные, но после последнего символа всё пустое пространство занимают точки. Как это реализовать?
Я бы под точки выделил еще один лабел. Сделал выравнивание по правому краю. После изменения основного лабела производил бы расчет нужного количества точек и заполнял бы второй лабел точками. И еще третий лабел под номер. И в итоге запихнул бы это все в один виджет =).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Мая 29, 2012, 11:35 »

Имхо, проще на 2-й виджет наложить текстуру из точки либо вообще отрисовать QPen-ом с Qt::DotLine.
Либо создать свой виджет в котором отрисовывать текст и дорисовывать точки.
Записан

Qt 5.11/4.8.7 (X11/Win)
spirits25
Гость
« Ответ #3 : Мая 29, 2012, 11:52 »

Имхо, проще на 2-й виджет наложить текстуру из точки либо вообще отрисовать QPen-ом с Qt::DotLine.
Либо создать свой виджет в котором отрисовывать текст и дорисовывать точки.
Можно пример?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Мая 29, 2012, 12:45 »

Код
C++ (Qt)
#include <QApplication>
#include <QPainter>
#include <QPaintEvent>
#include <QWidget>
#include <QGridLayout>
#include <QLabel>
 
class ContentsLabel : public QWidget
{
public:
ContentsLabel( const QString& s, QWidget* p = 0 )
: QWidget( p )
, text_( s ) {}
 
QSize sizeHint() const
{
br_ = QFontMetrics( font() ).boundingRect( text_ );
return br_.size();
}
void setDotColor( const QColor& clr )
{
dot_clr_ = clr;
update();
}
 
protected:
void paintEvent( QPaintEvent* e )
{
QPainter p( this );
QFontMetrics fm = p.fontMetrics();
int y = ( height() - br_.height() ) / 2 + fm.ascent();
p.drawText( 0, y, text_ );
int dot_w = fm.width( '.' );
if( dot_clr_ != QColor() )
p.setPen( dot_clr_ );
for( int x = br_.width() + 1; x < width(); x += dot_w )
p.drawText( x, y, "." );
}
 
private:
QString text_;
mutable QRect br_;
QColor dot_clr_;
};
 
int main( int argc, char** argv )
{
QApplication app( argc, argv );
QWidget w;
QGridLayout l( &w );
 
for( int i = 0; i < 20; i++ )
{
ContentsLabel* cl = new ContentsLabel( QString( "Contents text [%1]" ).arg( i + 1 ) );
cl->setDotColor( Qt::blue );
l.addWidget( cl, i, 0 );
QLabel* pl = new QLabel( QString::number( i + 1 ) );
pl->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
l.addWidget( pl, i, 1 );
}
w.show();
 
return app.exec();
}
 
« Последнее редактирование: Мая 29, 2012, 17:21 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
spirits25
Гость
« Ответ #5 : Мая 29, 2012, 15:54 »

Спасибо, всё работает. А как можно точки другим цветом отобразить? текст чёрным, а точки серым, но чтобы это оставался один QLabel?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Мая 29, 2012, 17:22 »

Ну а чего, думалка совсем не хочет думать? Всё же просто. См. правку выше.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 2.399 секунд. Запросов: 23.