Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alex Custov от Август 18, 2009, 12:25



Название: задание CSS border в QTabWidget
Отправлено: Alex Custov от Август 18, 2009, 12:25
Раз уж подняли тему про QTabWidget... Нашёл баг при задании бордюра через CSS для QTabWidget. Css такой:

Код
CSS
QTabWidget::pane
{
   border-image: url(:/border.png);
   border-width: 14px 14px 14px 14px;
}
 

Кажется всё проще некуда. Но. Минимально допустимый размер (а точнее высота) содержимого каждой вкладки уменьшается. Т.е. если на одной вкладке есть два вертикально расположенных lineEdit-a, то с использованием этого CSS я могу сжать виджет так, что lineEdit-ы станут высотой пикселей 5. Это ужасно неудобно. Это можно как-то поправить?

P.S. Qt 4.5.2, Debian Lenny.


Название: Re: задание CSS border в QTabWidget
Отправлено: BRE от Август 18, 2009, 12:33
А если min-height установить?

Код
CSS
QTabWidget::pane
{
   border-image: url(:/border.png);
   border-width: 14px 14px 14px 14px;
   min-height: 32px;
}
 


Название: Re: задание CSS border в QTabWidget
Отправлено: Alex Custov от Август 18, 2009, 12:39
фига ещё в том, что у QLineEdit вертикальная политика размера - Fixed. Как он вообще может сжиматься по вертикали  ???


Название: Re: задание CSS border в QTabWidget
Отправлено: Alex Custov от Август 18, 2009, 12:43
А если min-height установить?

Код
CSS
QTabWidget::pane
{
   border-image: url(:/border.png);
   border-width: 14px 14px 14px 14px;
   min-height: 32px;
}
 


не пойдёт, я не знаю какой минимальный размер будет у QTabWidget, их же несколько может быть - у одной это 32 у другой 80.


Название: Re: задание CSS border в QTabWidget
Отправлено: BRE от Август 18, 2009, 14:33
Решил посмотреть у себя в дизайнере....
У меня QLineEdit'ы не сжимаются, все нормально. Без всяких min-height. ???

qt-4.5.2-1.fc10.i386


Название: Re: задание CSS border в QTabWidget
Отправлено: Alex Custov от Август 18, 2009, 16:52
Решил посмотреть у себя в дизайнере....
У меня QLineEdit'ы не сжимаются, все нормально. Без всяких min-height. ???

qt-4.5.2-1.fc10.i386


попробуй вот такой пример

Код
C++ (Qt)
#include <QtGui>
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   QTabWidget *w = new QTabWidget;
 
   QWidget *p = new QWidget;
 
   QGridLayout *g = new QGridLayout;
   p->setLayout(g);
 
   QLineEdit *l;
 
   l = new QLineEdit;
   l->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
   g->addWidget(l, 0, 0);
 
   l = new QLineEdit;
   l->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
   g->addWidget(l, 1, 0);
 
   g->addWidget(new QLineEdit, 1, 0);
   g->addItem(new QSpacerItem(1, 1, QSizePolicy::Fixed, QSizePolicy::Expanding), 2, 0);
 
   w->addTab(p, "page1");
 
   w->show();
 
   return app.exec();
}
 


Название: Re: задание CSS border в QTabWidget
Отправлено: BRE от Август 18, 2009, 17:16
попробуй вот такой пример
А вот если QTabWidget расположить на QWidget все нормализуется.
Пока не соображу, что происходит....
Код
C++ (Qt)
#include <QtGui>
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
QWidget *mainWidget = new QWidget;
QVBoxLayout *mainLayout = new QVBoxLayout;
mainWidget->setLayout( mainLayout );
 
   QTabWidget *w = new QTabWidget( mainWidget );
mainLayout->addWidget( w );
 
   QWidget *p = new QWidget;
 
   QGridLayout *g = new QGridLayout;
   p->setLayout(g);
 
   QLineEdit *l;
 
   l = new QLineEdit;
//    l->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
   g->addWidget(l, 0, 0);
 
   l = new QLineEdit;
//    l->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
   g->addWidget(l, 1, 0);
 
//    g->addWidget(new QLineEdit, 1, 0);
   g->addItem(new QSpacerItem(1, 1, QSizePolicy::Fixed, QSizePolicy::Expanding), 2, 0);
 
   w->addTab(p, "page1");
 
   mainWidget->show();
 
   return app.exec();
}
 


Название: Re: задание CSS border в QTabWidget
Отправлено: Alex Custov от Август 18, 2009, 18:03
попробуй вот такой пример
А вот если QTabWidget расположить на QWidget все нормализуется.
Пока не соображу, что происходит....

да, и теперь примени тот стиль что я показал выше  ;D Результат опять будет неправильным - lineEdit-ы потеряют свою минимальную высоту:

(http://pic.ipicture.ru/uploads/090818/thumbs/VTNnak30B6.png) (http://ipicture.ru/Gallery/Viewfull/22474636.html)

Код
C++ (Qt)
#include <QtGui>
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   QWidget *mainWidget = new QWidget;
   QVBoxLayout *mainLayout = new QVBoxLayout;
   mainWidget->setLayout( mainLayout );
 
   QTabWidget *w = new QTabWidget( mainWidget );
   w->setStyleSheet(""
"QTabWidget::pane"
"{"
"    border-image: url(border.png);"
"    border-width: 14px 14px 14px 14px;"
"}    ");
   mainLayout->addWidget( w );
 
   QWidget *p = new QWidget;
 
   QGridLayout *g = new QGridLayout;
   p->setLayout(g);
 
   QLineEdit *l;
 
   l = new QLineEdit;
   g->addWidget(l, 0, 0);
 
   l = new QLineEdit;
   g->addWidget(l, 1, 0);
 
   g->addItem(new QSpacerItem(1, 1, QSizePolicy::Fixed, QSizePolicy::Expanding), 2, 0);
 
   w->addTab(p, "page1");
 
   mainWidget->show();
 
   return app.exec();
}
 


Название: Re: задание CSS border в QTabWidget
Отправлено: BRE от Август 18, 2009, 18:23
да, и теперь примени тот стиль что я показал выше  ;D Результат опять будет неправильным - lineEdit-ы потеряют
У меня все нормально.
Я styleSheet устанавливал и для w и для mainWidget.
 ???