qt-Programm: QLineEdit mit QPushButton auslesen funktioniert nicht, warum?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo, der Aufbau des User-Interfaces ist sehr "krass" , aber, um es genau  erkären zu können solltest du noch den Inhalt der main() mit dazuschreiben.

Für den ganzen Source-code reichte derPlatz im Editor von gutefrage.net nicht.

hier der Rest:

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include "counter.h"
int main(int argc, char argv[])
{
int zahl = 33;
QString zawo;
QString wort = "123";
//QString dummy = "";
QString test = "Test";
QApplication app(argc, argv);
QWidget
fenster = new QWidget();
fenster->setWindowTitle("Hallo 6");
fenster->setGeometry(300,200,300,200);
QLineEdit e = new QLineEdit(fenster);
e->setGeometry(10,10,150,20);
e->setText(wort);
QLineEdit
erge = new QLineEdit(fenster);
erge->setGeometry(10,50,150,20);
MeinFenster mf = new MeinFenster();
mf->setGeometry(50,100,200,200);
mf->show();
wort = e->text();
zahl = wort.toInt();
zahl +=2;
zawo.setNum(zahl);
erge->setText(zawo);
QPushButton
clear = new QPushButton("Clear", fenster);
clear->setGeometry(50,120,95,20);
QPushButton finito = new QPushButton("exit", fenster);
finito->setGeometry(150,120,95,20);
fenster->show();
Counter
z = new Counter(fenster);
z->setGeometry(10,80,95,20);
z->show();
// Wollte zuert alles im Hauptfenster machen, aber nichts ausser countUp klappt????
QObject::connect(clear, SIGNAL (clicked()), z, SLOT ( countUp() ) );
QObject::connect(finito, SIGNAL (clicked()), &app, SLOT ( quit() ) );
return app.exec();
}

0
@Fitje

Habs mit allen Versionen von Zeiger-Aufrufen probiert. Bis Weihnachten gib ich mir Zeit. Wenns dann nicht funzt, hör ich mit qt auf und bleib bei c und c++. Mit 50 Jahren auf dem Buckel muß ich mir nichts mehr beweisen und hab was anderes zu tun als ständig aufm Rechner rumzudödeln.

0

Hallo,

am besten schick den ganzen source-code an kaiAbuSir at gmx.de damit nichts verloren geht.

Und: Wenn im Debug-Fenster die message kommt ...no such slot...,

dann hat man meist eine schreibfehler gemacht, oder die falschen paramter angegeben (z.b. mySlot(int) stall mySlot(int &) )

Hallo, der source code kann so nicht stimmen: ... = new MeinFenster(); //geht nicht: Denn es gibt ja gar keine Klasse "MeinFenster" sondern MeinFenster() ist ein Methode von Counter. (Außderdem fehlen ein paar Sternchen *, die sind aber wohl vom Editor verschluckt worden, kein Problem)

Richtig der Editor hat da selbst im Source-Code-Modus einiges verschluckt. Mit geht es um die Parameterübergabe bei den Funktionen die auf QLineEdit. Selbst wenn ich diese in der Klassendeklaration als public angebe, geht es nicht. Ich möchte innerhalb der Methode testen auf *gf und * zurückgreifen können.

Wenn ich das Prog laufen lasse, kommt nur eine Fehlermeldung:

no such Slot.

Den Code für eine Parameterübergabe wie folgt:

 void Counter :: testen\
( hier Parameter für QlineEdit-zugriff ) { zahli = hf->text(); setText(zahli); }

wüßte ich gerne, wie geht das?

0

Hab das ganze jetzt mit dem QT-Designer gemacht. ausserdem mit

gf -> setText(QString("%1").arg(sinus,0,'f',7));

jetzt klappt es. Der moderne QT-Creator rechnet die ui-Dateien dazu. Deswegen hat es mit dem alten code nicht geklappt.

0

QList<myClass> zu QList<myClass*> machen?

Hallöchen ich bins schon wieder...

Eigentlich steht alles was ich wissen möchte in der Frage oben. Ich habe also eine QList in der Objekte meiner Klasse enthalten sind. Jetzt möchte ich eine Liste erstellen die die Pointer/Zeiger auf genau die Objekte enthält die in der Klasse sind.

Ich dachte ich realisiere das mit einer for-Schleife, wie folgt:

    for(int i = 0; i < _testerObjekte.size(); i++)
    {
        _testerPointer.append(&(_testerObjekte.at(i)));
    }

Jetzt wird mir allerdings folgender Fehler angezeigt:

invalid conversion from 'const Tester' to 'Tester' [-fpermissive]

Ich verstehe aber nicht warum? Beide Listen (_testerPointer und _testerObjekte) sind innere Variablen der Klasse und nicht const deklariert. also einfach QList<myClass> _testerPointer; bzw. ohne Sternchen. Die Funktion in der die for-Schleife sich befindet ist auch nicht als const deklariert. Woher kommt der Fehler und wie kann ich ihn beheben?

Dankeschön!!!

...zur Frage

C# Delegaten/Invoke/Thread/Backgroundworker?

Huhu,

bin aktuell am rumexperimentieren, da ich es am lernen bin. Dieses Test Form hat nur 2 Dinge die es machen soll.

  1. Das Form Load wird mit einem Label gestartet um den Spieler zu begrüßen. Nach 2 bzw 3 Sekunden soll dass label unsichtbar werden mithilfe eines Backgroundworkes und delegaten. Alles startet normal. Nach den besagten paar Sekunden wirft er mir eine exeption. Als Grund nennt er mir immer das label1. Meine Vermutung ist, dass label 1 ja bereits Form1 Thread läuft und daher nicht mehr geändert werden kann über einen Backgroundworker.

Die Exeption lautet : Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement label1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."

  1. Der zweite Punkt wäre, dass bei einem Button click ein Fenster aufgehen soll und sich nach ein paar Sekunden wieder schließen soll. Das tut es auch. Drücke ich aber nochmal den Button, wirft er mir diese Exeption: System.ObjectDisposedException: "Auf das verworfene Objekt kann nicht zugegriffen werden.Objektname: "Skynet"."

Hier ist der Code:

Für den Kenner ist das bestimmt alles Kraut und Ruben. Kurz: Ein Chaos. Aber aktuell ist es eher Try and Error :)

 public partial class Form1 : Form

  {

    public delegate void invokeDelegate();

    //Backgroundworker wird initialisiert

    public BackgroundWorker arbeiter = new BackgroundWorker();

    public BackgroundWorker arbeiter2 = new BackgroundWorker();

    //Delegaten

    public delegate void deleWorker (BackgroundWorker a);

    public delegate void gruss(BackgroundWorker b);

    //Begrüßungsfenster

    Skynet hello = new Skynet();

    //Zeigt Skynet Fenster an

    public void Show()

    {

       hello.Show();

        Thread.Sleep(3000);

        this.hello.Close();

        hello.Dispose();

    }

    //Willkommensgruß wird für 2 Sekunden angezeigt

    private void Willkommensgruss(Label a)

    {

      a.Text = "Willkommen, Fremder.";

      Thread.Sleep(2000);

        }

    public Form1()

    {

      InitalizeComponent();

      arbeiter.DoWork += backgroundWorker1_DoWork;

      arbeiter2.DoWork += backgroundWorker2_DoWork;

      Skynet hello = new Skynet();

         }

    private void Form1_Load(object sender, EventArgs e)

    {

      //delegate

      gruss hallo = new gruss(backgroundWorker2.RunWorkerAsync);

        hallo.Invoke(backgroundWorker2);

    }

    //Öffnet Skynet Fenster

    private void button2_Click(object sender, EventArgs e)

    {

      deleWorker test = new deleWorker(backgroundWorker1.RunWorkerAsync);

      test.Invoke(backgroundWorker1);

    }

    //Backgroundworker 1

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

    {

     Show();    

    }

    //Backgroundworker 2

    private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)

    {

    Willkommensgruss(label1);

    }

  }

}

...zur Frage

Wie kann man die X-Achse richtig messen mit Android Code?

Sehr geehrte Damen und Herren

In meinem App, welches ich zurzeit programmiere, möchte ich wie bei Doodle Jump bei Schwenken des Mobiltelefon ein Dreieck verschieben. Ich habe schon diverse Anleitungen gefunden, jedoch habe ich das Problem, dass wenn mein Handy nicht flach liegt, also zum Boden geneigt, dass dann die Werte nicht mehr stimmen. Kann mir jemand weiterhelfen?

    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    senGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
    sensorManager.registerListener(this,senGyroscope,SensorManager.SENSOR_DELAY_FASTEST);

    @Override
public void onSensorChanged(SensorEvent event) {

    if(event.sensor.getType()== Sensor.TYPE_ROTATION_VECTOR)
    {
        getGyroscope(event);
    }

}

    @Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}


private void getGyroscope(SensorEvent event)
{
    float[] values = event.values;
    // Movement
    float x = values[0];
    float y = values[1];


    this.posx_player = (int) ((middle_screen_x-middle_player_x)+(x*1500));
    txt2.setText(""+y);
    txt3.setText(""+x);


    params_player= new RelativeLayout.LayoutParams(150,150);
    params_player.setMargins(posx_player, (size_screen_y-400), 0, 0);
    img_player.setLayoutParams(params_player);

}
...zur Frage

Warum funktioniert der setOnClickListener() nicht?

Ich möchte, dass durch das RelativeLayout (id: account_test) eine neue Seite aufgerufen wird. Dazu verwende ich den FragmentManager. Im setOnCllickListener wird einfach ein wert zurückgegeben. Dieser wert wird in einer if-Verzweigung verglichen und wenn dies übereinstimmt, dann kommt der FragmentManager ins Spiel.

Java-Code:

public class Sidebar extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

String id;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sidebar);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    //Initialising Components of layouts

    //Search


    //Settings
    ImageView account = (ImageView)(findViewById(R.id.account_image));
    ImageView accountImageActionSettings = (ImageView) findViewById(R.id.account_image);
    View aboutMeImageActionSettings = findViewById(R.id.about_me);
    View generalImageActionsettings = findViewById(R.id.general);
    RelativeLayout test = (RelativeLayout)findViewById(R.id.account_test);

    test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            id = "test";
        }
    });
    FragmentManager fragmentManager = getFragmentManager();


    if (id.equals("test") )
    {
        fragmentManager.beginTransaction().
                replace(R.id.content_frame, 
                        new Settings())
                .commit();
    }

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
        this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

} }

Android-Monitor: FATAL EXCEPTION: main Process: com.vincenzkruesmann.smartifact, PID: 10322 java.lang.RuntimeException: Unable to start activity ComponentInfo{ com.vincenzkruesmann.smartifact/com.vincenzkruesmann.smartifact.Sidebar}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setOnClickListener(android.view$OnClickListener)

...zur Frage

JavaFX mit Gridpane 2 Hbox in das selbe Kästchen?

Hi!

Wie kann ich dafür sorgen, dass wenn ich in ein Kästchen einer Javefx Gridpane 2 Hboxen tue, dass deren beider Komponenten noch für Events empfänglich sind. Hier ein Beispiel, dass NICHT funktioniert:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class Test extends Application {

public static void main(String[] args) {
    launch(args);
}
@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Test");
    Button btn1 = new Button();
    btn1.setText("Knopf 1");
    btn1.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("1. Knopf");
        }
    });
    Button btn2 = new Button();
    btn2.setText("Knopf 2");
    btn2.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("2. Knopf");
        }   
    });
    HBox b1 = new HBox();
    b1.setAlignment(Pos.BASELINE_LEFT);
    b1.getChildren().add(btn1);
    
    HBox b2 = new HBox();
    b2.setAlignment(Pos.BASELINE_RIGHT);
    b2.getChildren().add(btn2);
    
    GridPane root = new GridPane();
    root.setGridLinesVisible(true);
    root.add(b2, 0, 0);
    root.add(b1, 0, 0);
    root.add(new Label("______________SPACER______________"), 0, 1);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
  }
}

Der 2. Knopf steht zwar am Anfang im Fokus, lässt sich aber nicht drücken/ mit Enter betätigen. Er lässt sich auch nach drücken des 1. Knopfs nicht wieder in den Fokus bringen. Wie kann ich das Lösen, OHNE beide in eine box zu bringen?

Danke für alle hilfreichen Antworten. __________________________________________________________________

Ich will NICHT sowas wie "Du köntest die knöpfe doch einfach in verschiedene Kästchen selzen." hören. Das ist nur ein BEISPIEL, bei meinem Code, für den ich das brauche, ist das vonnöten.

...zur Frage

Was möchtest Du wissen?