Qt - QTextEdit - wymiary kontrolki

0

Czy ktoś byłby w stanie mi powiedzieć jak zmienić rozmiar kontrolki QTextEdit w taki sposób aby automatycznie sama się dopasowywała do rozmiaru w layoucie ?

obecnie to wygląda tak

screenshot-20191122110610.png

a tu poniżej kod który wyciągnął rozmiary tej kontrolki ale w ogóle żadna funkcja nie chce zmienić jego rozmiaru

     Sygnatura = new QTextEdit();
//    Sygnatura->setFrameRect(QRect(0,0,1,1));
//    qDebug()<< Sygnatura->frameRect();
    Sygnatura->rect().setWidth(10);
    qDebug()<<Sygnatura->rect().width();
    qDebug()<<Sygnatura->rect().height();
    qDebug()<<Sygnatura->geometry();
    Sygnatura->setGeometry(0,0,rect().width(), rect().height());
    Sygnatura->QAbstractScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    Sygnatura->QAbstractScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    Sygnatura->setLineWrapMode(QTextEdit::NoWrap);
//    Sygnatura->setFixedSize(150,35);

Wiem, że jest funkcja setFixedSize (co jest pokazane w ostatniej linijce) i faktycznie zmienia ona rozmiar tej kontrolki ale mi bardziej zależy na tym aby kontrolka QTextEdit sama dopasowywała się do rozmiaru widgetu w którym siedzi i nie rozpychała się na boki.

dla odmiany pokażę jak wygląda sytuacja bez kontrolki QTextEdit

screenshot-20191122111243.png

obie kontrolki same dopasowały się do rozmiaru i rozłożyły równomiernie.

0

Zdefiniuj "sama się dostosowywała".
Jak robisz layout to generalnie musisz określić, co się ma dziać jak miejsca przybywa/ubywa. Przeważnie daje się 1 widgetowi albo QSpacerowi sizePolicy na expanding, przez co pochłania przestrzeń jak okno zmienia rozmiar. Można też dodatkowo poustawiać minimalne/maksymalne/stałe rozmiary widgetów.
Inne podejście to zdefiniowanie proporcji, np w twoim przypadku QTextEdit chapnie połowę dostępnej przestrzeni w poziomie, QDateEdit 1/8, a resztę QComboBox. Do tego używa się czegoś zwanego stretch factors.

0

"sama się dostosowywała" - to mam na myśli sytuację z ostatniego screena, że kontrolka automatycznie się dopasowuje do miejsca w layoucie aby przestrzeń współdzielić z innymi kontrolkami

na pierwszym screenie widać, że QTextEdit ma wymiary 640x480 i dlatego pole QGroupBox jest takie rozepchane przez tą kontrolkę

1

Wciąż nie wiadomo, jaki efekt dokładnie chcesz uzyskać. Spróbuj tak, i powiedz czy odpowiada (jak się domyślam chodzi o miejsce w poziomie):

  1. ustaw sizePolicy() dla QLineEdit (QTextEdit w takim wypadku jest niepotrzebny) na expanding horyzontalnie i preffered wertykalnie
  2. ewentualnie ustaw jakieś minimalne rozmiary QComboBoxa i QDateTimeEdita jeśli QLineEdit zbytnio je na boki rozepchnie.

Jak nie o taki efekt chodzi to w Designerze ręcznie poukładaj widgety tak jak chcesz, bez dodawania layoutu, po czym zrób i wklej zdjęcie ekranu.

0
zkubinski napisał(a):
     Sygnatura = new QTextEdit();
//    Sygnatura->setFrameRect(QRect(0,0,1,1));
//    qDebug()<< Sygnatura->frameRect();
    Sygnatura->rect().setWidth(10);
    qDebug()<<Sygnatura->rect().width();
    qDebug()<<Sygnatura->rect().height();
    qDebug()<<Sygnatura->geometry();
    Sygnatura->setGeometry(0,0,rect().width(), rect().height());
    Sygnatura->QAbstractScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    Sygnatura->QAbstractScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    Sygnatura->setLineWrapMode(QTextEdit::NoWrap);
//    Sygnatura->setFixedSize(150,35);

Jeśli używasz layoutów, to nie wolno ci używać setGeometry, bo zrzekłeś się odpowiedzialności za rozmiar i pozycję widgetów na rzecz layoutów.
A jeśli nie używasz layoutów, to zacznij.

Opisz jaki rezultat chcesz uzyskać, tak, żebyśmy rozumieli o co ci chodzi.

0

w sumie może inaczej powiem.

Jak tworzę obiekt typu QHBoxLayout i osadzam w nim obiekt typu QComboBox to obiekt QComboBox automatycznie dopasowuje swój rozmiar do okna i jak dokładam kolejne obiekty do obiektu QHBoxLayout to wszystkie dopasowują się.

Inaczej się dzieje z obiektem typu QTextEdit... ten ma na starcie ustawiony rozmiar 640x480 i teraz jak ten sztywny rozmiar zmienić na taki aby dopasowywał się np do wymiarów okna lub do wymiarów QHBoxLayout ?

0

A jeśli nie używasz layoutów, to zacznij.

to część mojego kodu

    GrupaWyszukiwania = new QGroupBox(QString("Kryteria wyszukiwania"));
    GrupaWyszukiwania->setStyleSheet("QGroupBox{font-weight: bold; border: 1px solid gray; border-radius: 5px; margin-top: 1ex;} QGroupBox::title{subcontrol-origin: margin; subcontrol-position: top center; padding: 0 3px;}");
    layout2 = new QVBoxLayout();
    layout3 = new QVBoxLayout(GrupaWyszukiwania);
    BttLayout2 = new QHBoxLayout();

gdzieś dalej

    Status = new QComboBox();
    Status->insertItems(0, statusList);
    Status->setFixedHeight(35);
    QObject::connect(Status, &QComboBox::currentTextChanged, this, &MainWindow::selectedStatus);

    Sygnatura = new QTextEdit();
//    Sygnatura->setFrameRect(QRect(0,0,1,1));
//    qDebug()<< Sygnatura->frameRect();
    Sygnatura->rect().setWidth(10);
    Sygnatura->rect().setHeight(10);
    qDebug()<<Sygnatura->rect().width();
    qDebug()<<Sygnatura->rect().height();
    qDebug()<<Sygnatura->geometry();
//    Sygnatura->setGeometry(0,0,rect().width(), rect().height());
    Sygnatura->QAbstractScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    Sygnatura->QAbstractScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    Sygnatura->setLineWrapMode(QTextEdit::NoWrap);
//    Sygnatura->setFixedSize(150,35);

    QObject::connect(Sygnatura, &QTextEdit::textChanged, this, &MainWindow::showText);

    Kryteria = new QCheckBox();
    QObject::connect(Kryteria, &QCheckBox::stateChanged, this, &MainWindow::chceckChanged);
    Kryteria->setText(QString("Włącz wyszukiwanie według wszystkich kryteriów"));

gdzieś dalej ustawienie widgetów w layoucie

    gridLayout->addWidget(GrupaWyszukiwania,0,0);
    layout3->addLayout(BttLayout2);
    layout3->addWidget(Kryteria);
    BttLayout2->addWidget(DateEdit);
    BttLayout2->addWidget(Sygnatura);
    BttLayout2->addWidget(Status);
    gridLayout->addWidget(ButtSearch,0,1);

    this->setCentralWidget(mainWigdet);
0

na samym layoucie bez ustawiania na sztywno wymiarów wygląda to tak

screenshot-20191122140710.png

czy ma ktoś jakiś pomysł ? foremek nie używam, może pomógłby QSpacerItem ? Tylko jak to zrobić ?

1

@Adam Boduch - dodawanie załączników się rypie :/

Nie używasz Designera to zacznij. A tu masz przykład projektu powyższego formularza, który reaguje na zmiany rozmiaru, zrobiłem go w czasie poniżej minuty.
https://www.sendspace.com/file/hw0cat

A tu kod źródłowy:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>876</width>
    <height>330</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QGridLayout" name="gridLayout_2">
   <item row="0" column="0" rowspan="3">
    <widget class="QGroupBox" name="groupBox">
     <property name="title">
      <string>Kryteria Wyszukiwania</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignCenter</set>
     </property>
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
       <widget class="QDateEdit" name="dateEdit">
        <property name="displayFormat">
         <string>dd-MMMM-yyyy</string>
        </property>
        <property name="calendarPopup">
         <bool>true</bool>
        </property>
       </widget>
      </item>
      <item row="0" column="1">
       <widget class="QTextEdit" name="textEdit"/>
      </item>
      <item row="0" column="2">
       <widget class="QComboBox" name="comboBox"/>
      </item>
      <item row="1" column="0" colspan="2">
       <widget class="QCheckBox" name="checkBox">
        <property name="text">
         <string>Włącz wyszukiwanie po wszystkich kryteriach</string>
        </property>
       </widget>
      </item>
     </layout>
    </widget>
   </item>
   <item row="0" column="1">
    <spacer name="verticalSpacer_2">
     <property name="orientation">
      <enum>Qt::Vertical</enum>
     </property>
     <property name="sizeHint" stdset="0">
      <size>
       <width>20</width>
       <height>136</height>
      </size>
     </property>
    </spacer>
   </item>
   <item row="1" column="1">
    <widget class="QPushButton" name="pushButton">
     <property name="text">
      <string>Szukaj</string>
     </property>
    </widget>
   </item>
   <item row="2" column="1">
    <spacer name="verticalSpacer">
     <property name="orientation">
      <enum>Qt::Vertical</enum>
     </property>
     <property name="sizeHint" stdset="0">
      <size>
       <width>20</width>
       <height>135</height>
      </size>
     </property>
    </spacer>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>
0

DZIĘKI !!!
nie użyłem formularza, podejrzałem sobie jego kod i opcje jakie może przyjąć widget QTextEdit i zrobiłem coś takiego

Sygnatura->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);

to pomogło !!! i efekt ? zrzut poniżej.

screenshot-20191122150318.png

1

A może lepiej użyć po prostu QLineEdit :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1