C++ 2 въпроса



  • 1.Как се слагат събития примерно когато се цъкне върху бутона да се смени текста ?
    2.Има ли начин да се наместват обектите по прозореца с пиксели а не със колони, редово и тн. ?
    @#include <QtGui>
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    QWidget *window = new QWidget();
    QLabel *label = new QLabel("text");
    QPushButton *button = new QPushButton("Click");
    QGridLayout *lay = new QGridLayout();
    lay->addWidget(label,0,0);
    lay->addWidget(button,0,1);
    window->setLayout(lay);
    window->show();
    return app.exec();
    }@



  • По въпрос 1: "Сигнали и слотове":http://doc.qt.nokia.com/stable/signalsandslots.html Накратко трябва да направиш използваш функцията connect() като и подадеш обект, сигнал, който излъчва, обект, слот, който да се изпълни при даденият сигнал. Така както си го написал ще ти е малко трудно, да свържеш нещо, защото слотовете по подразбиране за кликване на бутон и смяна на текст не са много съвместими и трябва да си направил под клас на QWidget, който има подходящите сигнали и слотове.

    По въпрос 2: Виж "QWidget::setGeometry":http://doc.qt.nokia.com/stable/qwidget.html#geometry-prop и "QWidget::move":http://doc.qt.nokia.com/stable/qwidget.html#pos-prop



  • За да не пускам нова тема ще питам тук. Искам да направя една форма в която да има един QTextEdit, чиито размери да могат да се намалят до нула когато формата се свива. В момента формата не може да се свие достатъчно защото textEdit-та ми поради непонятни за мен причини не се свива до размер нула а остава като 71x71 точки и оттам самата форма не може да се свие повече.
    Направих една примерна форма с един бутон и един QTextEdit, чиито код пействам тук.

    @<?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
    <class>MainWindow</class>
    <widget class="QMainWindow" name="MainWindow">
    <property name="geometry">
    <rect>
    <x>0</x>
    <y>0</y>
    <width>347</width>
    <height>91</height>
    </rect>
    </property>
    <property name="windowTitle">
    <string>MainWindow</string>
    </property>
    <widget class="QWidget" name="centralwidget">
    <layout class="QGridLayout" name="gridLayout_2">
    <item row="0" column="0">
    <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
    <widget class="QPushButton" name="pushButton">
    <property name="sizePolicy">
    <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
    </sizepolicy>
    </property>
    <property name="minimumSize">
    <size>
    <width>250</width>
    <height>0</height>
    </size>
    </property>
    <property name="maximumSize">
    <size>
    <width>16777215</width>
    <height>16777215</height>
    </size>
    </property>
    <property name="text">
    <string>PushButton</string>
    </property>
    </widget>
    </item>
    <item row="0" column="1">
    <widget class="QTextEdit" name="textEdit"/>
    </item>
    </layout>
    </item>
    </layout>
    </widget>
    </widget>
    <resources/>
    <connections/>
    </ui>
    @

    Искам формата ми да се може да се свива дотолкова, че текстовото поле буквално да изчезва. В момента то се свива на 71x71 и повече не може.



  • Предолагам, че текстовото поле си има минимални размери, които се определят от текста или поне от това, то да се вижда. Може да му сложиш нови. В дизайнера има поле за минимален размер, виж колко е то и го сложи на 0. Може и от кода да го направиш с "minimumSize":http://doc.qt.nokia.com/latest/qwidget.html#minimumSize-prop



  • [quote author="html4eto" date="1321307888"]1.Как се слагат събития примерно когато се цъкне върху бутона да се смени текста ?
    [/quote]

    Виж статията в wiki на Български "Как се използва QPushButton":http://developer.qt.nokia.com/wiki/How_to_Use_QPushButton_Bulgarian. Там има примерен код, който при натискане на бутон променя текста и размера му.



  • [quote author="task_struct" date="1322062119"]Предолагам, че текстовото поле си има минимални размери, които се определят от текста или поне от това, то да се вижда. Може да му сложиш нови. В дизайнера има поле за минимален размер, виж колко е то и го сложи на 0. Може и от кода да го направиш с "minimumSize":http://doc.qt.nokia.com/latest/qwidget.html#minimumSize-prop[/quote]

    Това с минималните размери беше първото за което се сетих. Не става. Давам му да са минимални и пак същата работа. Кода който съм пейстнал като се отвори с дизайнера се вижда, че минималните са 0. Истинската програма в която възникна този проблем е доста сложна и не мога да я пейстна. Там изобщо не използвам дизайнер - пиша всичко на ръка и разбира се съм сетнал минималните размери на 0. И не става и не става - има нещо което не позволява на текстовото поле да стане с размер близък до нулата.

    Ако може някой да вземе кода който дадох и да го сложи в един .ui файл и да го отвори с дизайнер-а. Там се вижда съвсем ясно какъв е проблема. Ако за този пример се намери решение, ще мога да го приложа и в истинската си програма. В този пример съм сложил един бутон с твърди размери. В истинската програма на мястото на този бутон има един тулбар с един куп неща в него, но той също е с твърдо заложени размери, а само текстовото поле (което изпълва останалото място от формата) трябва да може да се преоразмерява заедно с формата.

    Значи, прекалено сложно го казах, затова ще го кажа с прости думи: искам (налага се) формата ми да може да се преоразмерява до възможно най-малки размери, но това текстово поле не и позволява.



  • Ами аз си реших проблема.
    Получили са се два независими проблема, а аз се заблудих че е един...

    Проблема в истинската ми програма е, че не текстовото поле пречи, а многото тулбатове над него - те не позволяват минимални размери на формата.

    Но в дизайнера открих друг проблем. Оказа се, че ако не се зададе минимален размер, т.е. ако се остави така както е по подразбиране - нула, реално минималния размер не е нула, а този който е изписан в геометрията за височина и широчина. Ако обаче задам някакво число за минимален размер - например 1, тогава нещата се оправят. Мисля че това е грешка в дизайнера. Не в самия дизайнер, а в идеята на .ui формите. За да има минимален размер 0, това трябва изрично да се зададе по някакъв начин, а дизайнера не го прави.

    Я да попитам и един друг въпрос - нали темата е за въпроси :)
    В дизайнера има една много хубава функция - генериране на код (View Code...). Аз понеже не обичам да работя с .ui форми правя следното: правя си формата с дизайнера, после генерирам кода и си го пействам в .cpp файла и изобщо не използвам .ui файлове. Но. В QtCreator-a, във вградения му дизайнер тази функция (View Code...) липсва. Аз ли нещо не я откривам или?



  • По предният въпрос: Мисля, че ако не е зададен изрично минимален размер, системта използва sizeHint.

    По новият въпрос: Доколкото знам, тази функция не съществува в Qt Creator-а, защото не е нужда при наличието на тесктов редактор и начина на работа, който са разработили. Qt Creator-a динамично парсва .ui файла и ти предостава автоматично довършване на променливите от кода, който би се генерирал от него в редактора. За това няма нужд да си генерираш UI формите и да ги добавяш, както е било преди.



  • Има явно има нужда заради такива като мен дето не искат .ui файловете да са част от проекта. Така се принуждавам да инсталирам и самия дизайнер, който поне в Windows не се инсталира по подразбиране.
    Още в самото начало като си правех експерименти разбрах че дизайнера (.ui) сякаш не дава пълна свобода и трябва да се донаписват подобни неща на ръка, което малко го обезсмисля, но пък от друга страна имам програма със стотици компоненти в една форма и там е незаменим.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.