Почему граница QWidget закрывает содержимое? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть собственный виджет, полученный из QWidget, который имеет minimumSize из (30, 30) и QLabel как childWidget:

MyWidget::MyWidget (QWidget *parent, QPoint p,
                  QWidget *childWidget) : QWidget (parent)
{
    childWidget = this->childWidget;
    setAttribute (Qt::WA_DeleteOnClose);
    this->move (p);
    verticalLayout = new QVBoxLayout (this);

    if (childWidget != NULL)
    {
        childWidget->setParent (this);
        childWidget->releaseMouse();
        childWidget->setAttribute (Qt::WA_TransparentForMouseEvents,     true);
        verticalLayout->addWidget (childWidget);
    }
    this->setLayout(verticalLayout);
};

MyWidget::mouseMoveEvent (QMouseEvent *e)
{
    if (! (e->button() == Qt::RightButton))
    {
        this->update();
        this->raise();
    }
}

void MyWidget::mouseReleaseEvent (QMouseEvent *evt)
{
    QWidget::mouseReleaseEvent(evt);
    this->update();
}

MyWidget::mousePressEvent (QMouseEvent *e)
{
    if (! (e->button() == Qt::RightButton))
    {

        this->update();
        this->raise();
    }
}

void MyWidget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setPen(Qt::darkGreen);
    painter.drawRect(1, 2, 6, 4);
    painter.setPen(Qt::darkGray);
    painter.drawLine(2, 8, 6, 2);
}

//And some getter/setter methods.

Для установки границык виджету я использую следующий код:

 customWidget->setStyleSheet("*{border-width:" +
    2 +
    ";border-style:solid;border-color:" +
    #FFFFFF + " ;color:white;}");

Это выглядит так (родительский виджет имеет оранжевый фон):

enter image description here.

Когда я изменяю border-width на 10, граница охватывает содержимое:

enter image description here

Оба изображения показывают виджет в его минимальной высоте.

Мне кажется, что граница была применена внутрь.Что я должен изменить, чтобы указывать границу наружу, чтобы при большем border-width текст оставался видимым?

1 Ответ

0 голосов
/ 18 октября 2018

Причина

Граница выходит за пределы:

i.stack.imgur.com/EqClz.png

У вас проблема с размером.(30, 30) слишком мало для этой границы.30 - 2*10 (минимальная высота - в 2 раза больше ширины границы) равна 10.Размер шрифта превышает 10 пикселей, поэтому он не помещается в оставшееся пространство.

Решение

Возможно, вы захотите установить разумный размер, например (100, 50).Однако установка минимального размера не является гибкой, что означает, что он не учитывает изменения в содержимом виджета.Однако, если sizeHint и minimumSizeHint реализованы, необходимое пространство будет сообщаться всякий раз, когда это необходимо, как, например, это делается в QLabel.

Поскольку у вас уже естьQLabel как дочерний виджет, просто не устанавливайте minimumSize вашего пользовательского виджета, и правильный размер будет рассчитан автоматически.

...