Seite 1 von 1
3 kleine probleme
Verfasst: 6. September 2008 23:40
von SaLu
Hallo ich habe mal 3 kleine probleme und zwar
1. will ich ein LineEdit über zwei Buttons steuern. Also quasi eine Spinbox. da es aber für ein touchscreen sein soll muss es größer sein. Nun hab ich das problem das wenn man auf dem button draufbleibt die zahl im lineedit sich ständig wiederholt. also quasi ne schleife die läuft bis man loslässt. ich hatte folgenden Ansatz:
Code: Alles auswählen
bool tabs::eventFilter(QObject *obj, QEvent *event)
{
if(obj==ui.pushButton_33)
{
if (event->type() == QEvent::MouseButtonPress)
{
number10=ui.lineEdit->text();
bool ok;
numberhoch=number10.toDouble(&ok);
if(!ok)
{}
while(QEwent::MouseButtonPress)
{
numberhoch+=0.1;
ui.lineEdit->setText(QString("%1").arg(numberhoch,0,'f',1));
}
return true;
}else{
return false;
}
}
return false;
}
jedoch läuft er erst garnicht in die funktion rein

Muss ich vorher noch irgendwas machen?
2.
so mein zweites Problem sind die RadioButtons bzw checkboxen.Ich will dort die symbole, die später bei activated der hacken bzw punkt dargestellt wird, größer machen. Geht das?
3.
Bei den RadioButtons/checkboxen will ich den Klickrahmen größer machen,d.h ich will nicht nur durch klicken des textes oder des symbols activated/deactivated machen sondern auch in einem gewissen rahmen um den/die RadioButton/checkbox.
Ich hoffe da kann mir jmd helfen.
vielen dank
Verfasst: 7. September 2008 08:50
von upsala
1. Warum verwendest du nicht das clicked()-Signal?
2. & 3. Versuch es mal über Stylesheets
Verfasst: 7. September 2008 10:20
von SaLu
so habe nun mein problem gefunden bei 1. und zwar habe ich vergessen installeventfilter(). *schäm*
aber nichts destotrotz habe ich nun auch das mit dem slot clicked() gemacht und ich habe bei beiden das gleiche problem! Die abbruchbedingung der while schleife funktioniert nicht. habe verschiedene sachen versucht.
while(pushButton->isDown()) ; hasMouseTracking(),
while(!event->type()==QEvent::MouseButtonPress)
while(event->type()==QEvent::MouseButtonRelease)
...
zu 2 und 3 das mit den stylesheets schau ich mir noch genauer an.
Verfasst: 7. September 2008 11:55
von upsala
Die while-Schleife hatte ich zuvor gar nicht gesehen, woher willst du neue Events bekommen, wenn die Event-Loop nicht aufgerufen wird?
Verfasst: 7. September 2008 13:08
von SaLu
ja das habe ich mir auch gedacht. aber habe einfach nichts passendes gefunden! Oder kann ich die am ende der while schleife bzw vor der schleife nochmals abfragen?
Verfasst: 7. September 2008 15:15
von upsala
Dein Konzept ist falsch. Es gibt ein Mouse-press, move und release-Event. Und die müssen separat abgefangen werden, ohne eine Schleife...
Verfasst: 7. September 2008 16:53
von SaLu
also wenn ich dich richtig verstanden habe dann so.
Code: Alles auswählen
bool tabs::eventFilter(QObject *obj, QEvent *event)
{
if(obj==ui.pushButton_33)
{
if (event->type() == QEvent::MouseButtonPress)
{
number10=ui.lineEdit->text();
bool ok;
numberrunter=number10.toDouble(&ok);
if(!ok)
{}
pruefe=true;
while(pruefe)
{
numberrunter-=0.1;
ui.lineEdit->setText(QString("%1").arg(numberrunter,0,'f',1));
}
return true;
}else{
return false;
}
}
if(obj==ui.pushButton_33)
{
if (event->type() == QEvent::MouseButtonRelease)
{
pruefe=false;
return true;
}else{
return false;
}
}
dies funktioniert leider nicht

d.h es könnte natürlich sein das die schleife zu schnell ist, dass würde auch erklären warum das programm abschmirrt.
Verfasst: 8. September 2008 15:22
von FaS
Darf ich upsala zitieren:
woher willst du neue Events bekommen, wenn die Event-Loop nicht aufgerufen wird?
Und die müssen separat abgefangen werden, ohne eine Schleife...
Der GUI-Thread ist derselbe wie der, indem deine Funktionen stehen. Solange du eine Funktion nicht verlässt, hängt das Programm. Man kann anstehende events zwar explizit abarbeiten lassen, aber das ist hier nicht erforderlich. Schau dir das an:
QAbstractButton::autoRepeat und vergiss deinen bisherigen Ansatz. Benutze signals & slots. Und verbringe mehr Zeit mit dem Entwurf von Thread-Titeln.
Im übrigen wird dein 2. if-Konstrukt in deinem letzten Beitrag niemals abgearbeitet, selbst wenn die Funktion während der Schleife aufgerufen werden würde.
Zu deinen anderen Problemen: Möglicherweise kannst du Check-Boxen usw durch normale Buttons ersetzen, es gibt entsprechende Eigenschaften. Was besseres fällt mir jetzt nicht ein. Stylesheets wurden auch schon erwähnt, könnte möglicherweise was passendes dabei sein. Um die "Klick-Fläche" zu vergrößern, kannst du auch einfach das jeweilige widget vergrößern, oder die Textgröße ändern..
Verfasst: 8. September 2008 20:08
von SaLu
genau so hab ich mir die antwort vorgestellt. punkt 1 klappt perfekt. nun kommt punkt2 und 3. da les ich mich morgen mal rein und geb euch bescheid.
Verfasst: 13. September 2008 11:25
von SaLu
so hab mir mal Stylesheets durchgelesen und scheint ganz zu klingen. Nur nicht immer zu dem was ich brauche. Eines hab ich schonmal hinbekommen und zwar die "Boxen" in den checkboxen größer zu machen. Genauso wollte ich es auch in den RadioButtons machen leder ohne erfolg. Dazu kommt noch das bei den checkboxen der checked Hacken nicht auch größer wird, d.h ich habe eine große Box und einen kleinen Hacken. Das ist nicht allzu toll. Kann mir jmd sagen wie die Befehle für den hacken und den RadioButton lauten. Wäre echt nett. Hier der Befehl zum größer machen der "box"
checkBox->setStyleSheet( "QCheckBox::indicator {width: 15px;height: 15px;}");
für alles gibt es beispiele aber nurnicht für soetwas... Wer braucht den schon einen farbigen button

Verfasst: 13. September 2008 16:47
von FaS
Wie soll das gehen, dann hätte jemand Bildchen für alle möglichen und unmöglichen Größen malen müssen. Je nach Style werden einige Elemente vektoriell gerendert, oder wenn nicht, durch Interpolation gestreckt, wodurch deine Anforderungen jeweils erfüllt sind. Aber halt nicht bei jedem. Könnte man als Bug ansehen; ist wohl nicht allzu üblich Steuerelemente zu vergrößern. Zur Not musst du die Bilder eben selber malen.
Du kannst auch deine komplette Oberfläche in ein spezielles Objekt zeichnen und dann (Größen-)Transformiert rendern lassen - Benutzereingaben werden mittransformiert. Gibt entsprechende Klassen, weiß aber nicht ob soetwas besonders elegant ist.
MfG,
FaS
Verfasst: 13. September 2008 18:30
von SaLu
ok leider schade, aber mit den bildchen dürfte es auch ganz gut gehen. Mal sehen wie es aussieht. vielen dank