C++ 2 въпроса
-
wrote on 14 Nov 2011, 21:58 last edited by
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();
}@ -
wrote on 14 Nov 2011, 22:09 last edited by
По въпрос 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
-
wrote on 23 Nov 2011, 15:11 last edited by
За да не пускам нова тема ще питам тук. Искам да направя една форма в която да има един 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 и повече не може.
-
wrote on 23 Nov 2011, 15:28 last edited by
Предолагам, че текстовото поле си има минимални размери, които се определят от текста или поне от това, то да се вижда. Може да му сложиш нови. В дизайнера има поле за минимален размер, виж колко е то и го сложи на 0. Може и от кода да го направиш с "minimumSize":http://doc.qt.nokia.com/latest/qwidget.html#minimumSize-prop
-
wrote on 23 Nov 2011, 22:26 last edited by
[quote author="html4eto" date="1321307888"]1.Как се слагат събития примерно когато се цъкне върху бутона да се смени текста ?
[/quote]Виж статията в wiki на Български "Как се използва QPushButton":http://developer.qt.nokia.com/wiki/How_to_Use_QPushButton_Bulgarian. Там има примерен код, който при натискане на бутон променя текста и размера му.
-
wrote on 24 Nov 2011, 12:06 last edited by
[quote author="task_struct" date="1322062119"]Предолагам, че текстовото поле си има минимални размери, които се определят от текста или поне от това, то да се вижда. Може да му сложиш нови. В дизайнера има поле за минимален размер, виж колко е то и го сложи на 0. Може и от кода да го направиш с "minimumSize":http://doc.qt.nokia.com/latest/qwidget.html#minimumSize-prop[/quote]
Това с минималните размери беше първото за което се сетих. Не става. Давам му да са минимални и пак същата работа. Кода който съм пейстнал като се отвори с дизайнера се вижда, че минималните са 0. Истинската програма в която възникна този проблем е доста сложна и не мога да я пейстна. Там изобщо не използвам дизайнер - пиша всичко на ръка и разбира се съм сетнал минималните размери на 0. И не става и не става - има нещо което не позволява на текстовото поле да стане с размер близък до нулата.
Ако може някой да вземе кода който дадох и да го сложи в един .ui файл и да го отвори с дизайнер-а. Там се вижда съвсем ясно какъв е проблема. Ако за този пример се намери решение, ще мога да го приложа и в истинската си програма. В този пример съм сложил един бутон с твърди размери. В истинската програма на мястото на този бутон има един тулбар с един куп неща в него, но той също е с твърдо заложени размери, а само текстовото поле (което изпълва останалото място от формата) трябва да може да се преоразмерява заедно с формата.
Значи, прекалено сложно го казах, затова ще го кажа с прости думи: искам (налага се) формата ми да може да се преоразмерява до възможно най-малки размери, но това текстово поле не и позволява.
-
wrote on 24 Nov 2011, 12:55 last edited by
Ами аз си реших проблема.
Получили са се два независими проблема, а аз се заблудих че е един...Проблема в истинската ми програма е, че не текстовото поле пречи, а многото тулбатове над него - те не позволяват минимални размери на формата.
Но в дизайнера открих друг проблем. Оказа се, че ако не се зададе минимален размер, т.е. ако се остави така както е по подразбиране - нула, реално минималния размер не е нула, а този който е изписан в геометрията за височина и широчина. Ако обаче задам някакво число за минимален размер - например 1, тогава нещата се оправят. Мисля че това е грешка в дизайнера. Не в самия дизайнер, а в идеята на .ui формите. За да има минимален размер 0, това трябва изрично да се зададе по някакъв начин, а дизайнера не го прави.
Я да попитам и един друг въпрос - нали темата е за въпроси :)
В дизайнера има една много хубава функция - генериране на код (View Code...). Аз понеже не обичам да работя с .ui форми правя следното: правя си формата с дизайнера, после генерирам кода и си го пействам в .cpp файла и изобщо не използвам .ui файлове. Но. В QtCreator-a, във вградения му дизайнер тази функция (View Code...) липсва. Аз ли нещо не я откривам или? -
wrote on 24 Nov 2011, 13:16 last edited by
По предният въпрос: Мисля, че ако не е зададен изрично минимален размер, системта използва sizeHint.
По новият въпрос: Доколкото знам, тази функция не съществува в Qt Creator-а, защото не е нужда при наличието на тесктов редактор и начина на работа, който са разработили. Qt Creator-a динамично парсва .ui файла и ти предостава автоматично довършване на променливите от кода, който би се генерирал от него в редактора. За това няма нужд да си генерираш UI формите и да ги добавяш, както е било преди.
-
wrote on 24 Nov 2011, 14:50 last edited by
Има явно има нужда заради такива като мен дето не искат .ui файловете да са част от проекта. Така се принуждавам да инсталирам и самия дизайнер, който поне в Windows не се инсталира по подразбиране.
Още в самото начало като си правех експерименти разбрах че дизайнера (.ui) сякаш не дава пълна свобода и трябва да се донаписват подобни неща на ръка, което малко го обезсмисля, но пък от друга страна имам програма със стотици компоненти в една форма и там е незаменим.