Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Sancho_s_rancho от Июнь 30, 2010, 11:08



Название: Виджеты в ToolBare
Отправлено: Sancho_s_rancho от Июнь 30, 2010, 11:08
Есть такой замечательный контрол/виджет как spinbox. Мне же захотелось той же функциональности, но с другим внешним видом: слева полноценная toolbutton, по центру поле ввода  и слева еще один toolbutton.  
Сделал что-то типа:

Код:
intValidator = new QIntValidator(this);
    less = new QToolButton();
    less->setAutoRaise(true);
    more = new QToolButton();
    more->setAutoRaise(true);
    lineEdit = new QLineEdit();
    lineEdit->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred));
    lineEdit->setFixedWidth(lineEdit->sizeHint().height()*2);
    lineEdit->setValidator(intValidator);
    setLineEditContent(initialContent);
    lineEdit->setAlignment(Qt::AlignHCenter);
    layout = new QHBoxLayout();
    layout->setSpacing(0);
    layout->setContentsMargins(0,0,0,0);
    layout->addWidget(less);
    layout->addWidget(lineEdit);
    layout->addWidget(more);
Поместил на toolbar и оказалось, что кнопки less и more меньше, чем соседние QActionы. При этом QLineEdit вполне себе занимает по высоте допустимый размер. С гигантским QLineEdit все решаемо, а вот buttonы почему такие маленькие.
(см. скриншот)


Название: Re: Виджеты в ToolBare
Отправлено: NicK от Июль 01, 2010, 15:12
а если вручную устанавливать минимальные/максимальные размеры QToolButton'ов равным ширине QLineEdit?


Название: Re: Виджеты в ToolBare
Отправлено: Sancho_s_rancho от Июль 01, 2010, 15:18
а если вручную устанавливать минимальные/максимальные размеры QToolButton'ов равным ширине QLineEdit?
Такие фокусы (прописывание ручками исходя из каких-то  других размеров) у меня припасены на крайний случай.


Название: Re: Виджеты в ToolBare
Отправлено: GreatSnake от Июль 01, 2010, 15:42
Цитировать
Сделал что-то типа:
Ваше "что-то типа" уж очень кастрированное.
Выкладывайте рабочий кусок кода.


Название: Re: Виджеты в ToolBare
Отправлено: Sancho_s_rancho от Июль 01, 2010, 18:33
Цитировать
Сделал что-то типа:
Ваше "что-то типа" уж очень кастрированное.
Выкладывайте рабочий кусок кода.
Ну вообще-то это и есть кусок кода. Но если желаете видеть скобочки, то могу так:
Код:
IntEdit::IntEdit(int initialContent, QWidget *parent) :
        QWidget(parent)
{
    intValidator = new QIntValidator(this);
    less = new QToolButton();
    less->setAutoRaise(true);
    more = new QToolButton();
    more->setAutoRaise(true);
    lineEdit = new QLineEdit();
    lineEdit->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred));
    lineEdit->setFixedWidth(lineEdit->sizeHint().height()*2);
    lineEdit->setValidator(intValidator);
    setLineEditContent(initialContent);
    lineEdit->setAlignment(Qt::AlignHCenter);
    layout = new QHBoxLayout();
    layout->setSpacing(0);
    layout->setContentsMargins(0,0,0,0);
    layout->addWidget(less);
    layout->addWidget(lineEdit);
    layout->addWidget(more);
    setLayout(layout);
    setConnections();
}
И далее для toolbarа главного окна я делаю addWidget(тут_объект_IntEdit). Никакой магии :)


Название: Re: Виджеты в ToolBare
Отправлено: m_ax от Июль 01, 2010, 19:16
Установите для Ваших QToolButton QSizePolicy::Preferred по вертикали.
Должно помочь. 


Название: Re: Виджеты в ToolBare
Отправлено: Sancho_s_rancho от Июль 01, 2010, 20:15
Установите для Ваших QToolButton QSizePolicy::Preferred по вертикали.
Должно помочь.  
Не помогло. Может потому что там векторные иконки?
Но помогло следующее:
Цитировать
The button's look and dimension is adjustable with setToolButtonStyle() and setIconSize(). When used inside a QToolBar in a QMainWindow, the button automatically adjusts to QMainWindow's settings (see QMainWindow::setToolButtonStyle() and QMainWindow::setIconSize()). Instead of an icon, a tool button can also display an arrow symbol, specified with arrowType.
Соответсвенно:
Код:
QMainWindow *mw = qobject_cast<QMainWindow*>(parent);
    if (mw)
    {
        less->setIconSize(mw->iconSize());
    }
Если приведение к классу QMainWindow успешно, то наследуем его размер иконок.  Поскольку я помещал не тулбаттоны, а виджет, содержащий тулбаттоны, то автоматом настройки главного окна не брались.