Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Авварон от Ноябрь 11, 2009, 12:31



Название: QSplitter vs dock
Отправлено: Авварон от Ноябрь 11, 2009, 12:31
Нужно сделать 3 виджета, отделенных друг от друга черной полоской. Сплиттер отказывается ставить ширину хэндла в 0 (сбрасывает на дефолт).
Склоняюсь сделать через док виджеты. Ведь в qtCreator'e именно они?


Название: Re: QSplitter vs dock
Отправлено: break от Ноябрь 11, 2009, 12:55
если вам не нужно чтобы виджеты ездили - просто разместите их на QFrame и выставите параметры рамки - для боковых - убрать рамку, для центрально шириной 1 пиксель


Название: Re: QSplitter vs dock
Отправлено: crossly от Ноябрь 11, 2009, 12:55
они.... но по ходу с наложенным stylesheet....


Название: Re: QSplitter vs dock
Отправлено: Авварон от Ноябрь 11, 2009, 12:59
break
мне наоборот надо чтоб ездили) в том-то и загвоздка. Но вез видимого сплиттера (т.е. черная полоска толщиной в 1 пиксель - фактически сама рамка виджета).

crossly
Там не только в стайлшите дало, там же еще кастомные виджеты в заголовок дока встроены


Название: Re: QSplitter vs dock
Отправлено: Igors от Ноябрь 11, 2009, 13:20
Может как-то попроще, ну например унаследоваться от QSplitter и сделать ему пустой paint


Название: Re: QSplitter vs dock
Отправлено: Авварон от Ноябрь 11, 2009, 13:37
не совсем, но спасибо за мысль.
Моя задача в общем-то состояла в убирании отрисовки хэндлера (ибо он размером в 1 пиксель не смотрится)Решение:
Код:
class mySplitter : public QSplitter
{
public:
    mySplitter(Qt::Orientation o, QWidget * parent = 0) : QSplitter(o, parent) {}
    void paintEvent ( QPaintEvent * event ) {}
    QSplitterHandle *createHandle();
};

class SplitterHandle : public QSplitterHandle
{
public:
    SplitterHandle(Qt::Orientation o, QSplitter * parent = 0) : QSplitterHandle(o, parent) {}
//    QSize sizeHint () const {  return QSize(0, 0); }
    void paintEvent ( QPaintEvent * event ) {}
};

QSplitterHandle *mySplitter::createHandle()
{
    return new SplitterHandle(orientation(), this);
}
Сделать ширину 0 нельзя, тк за него нельзя будет таскать... Собственно черную полоску можно сделать в пейнт эвенте.
Но в общем-то вопрос все равно открыт - как сделать сплиттер 0й ширины?) Когда 2 виджета визуально разделены только рамкой


Название: Re: QSplitter vs dock
Отправлено: lit-uriy от Ноябрь 11, 2009, 13:53
А что если:
нарисовать поверх разделительной ручки толщиной в один пиксель, ещё виджет нужной ширины но прозрачный и транслировать события мыша с него в ручку?