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

Hallo Wir sollen für ein Schulprojekt ein Tic Tac Toe Programm in Java erstellen. Das hat alles auch soweit gut funktioniert, bis auf die Abbruchbedingung?

Das ist mein Programm wie bekomme ich hin, dass das spiel zu ende ist wenn 3 in einer reihe sind bzw. dass ausgegeben wird wer der Gewinner ist . Währe super wenn ihr mir helfen könntet. :D :D :D

import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class TTT implements ActionListener {

private JFrame window = new JFrame("Tic-Tac-Toe"); private JButton button1 = new JButton(""); private JButton button2 = new JButton(""); private JButton button3 = new JButton(""); private JButton button4 = new JButton(""); private JButton button5 = new JButton(""); private JButton button6 = new JButton(""); private JButton button7 = new JButton(""); private JButton button8 = new JButton(""); private JButton button9 = new JButton(""); private String letter = ""; private int count = 0;

public TTT(){

window.setSize(400,400);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLayout(new GridLayout(3,3));


window.add(button1);
window.add(button2);
window.add(button3);
window.add(button4);
window.add(button5);
window.add(button6);
window.add(button7);
window.add(button8);
window.add(button9);


button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
button6.addActionListener(this);
button7.addActionListener(this);
button8.addActionListener(this);
button9.addActionListener(this);


window.setVisible(true);

}

public void actionPerformed(ActionEvent a) { count++;

if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9){
  letter = "X";
} else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10){
  letter = "O";
}

/*Display X's or O's on the buttons*/
if(a.getSource() == button1){
  button1.setText(letter);
} else if(a.getSource() == button2){
  button2.setText(letter);
} else if(a.getSource() == button3){                                           
  button3.setText(letter);
} else if(a.getSource() == button4){
  button4.setText(letter);
} else if(a.getSource() == button5){
  button5.setText(letter);
} else if(a.getSource() == button6){
  button6.setText(letter);
} else if(a.getSource() == button7){
  button7.setText(letter);
} else if(a.getSource() == button8){
  button8.setText(letter);
} else if(a.getSource() == button9){
  button9.setText(letter);
}


// end of if

}

public static void main(String[] args){ new TTT(); } }

...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 ich beim Scrollen einer Listview mehr Items laden?

Meine App zieht über eine PHP Verbindung Werte aus einer Datenbank und stellt sie in einer Listview dar. Problem ist, dass die App ab einer bestimmten Anzahl von Datenbankeinträgen crasht, weil sie nicht alle Werte der Datenbank laden kann.

Die Lösung ist immer nur 10 Items zu laden und beim Runterscrollen werden weitere 10 geladen.

Wie kann ich, wenn man bei der Listview nach ganz unten gescrollt hat, einen Progressdialog anzeigen und so weitere 10 Items laden?

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.layout, container, false);
listView1 = (ListView) view.findViewById(R.id.listview);
listView1.setOnItemClickListener(this);
getURLs();

return view;

}

private void getImages(){ class GetImages extends AsyncTask<Void,Void,Void>{ ProgressDialog loading; @Override protected void onPreExecute() { super.onPreExecute(); loading = ProgressDialog.show(getActivity(),"Loading ...","Please wait...",false,false); }

@Override
protected void onPostExecute(Void v) {
    super.onPostExecute(v);
    loading.dismiss();
    //Toast.makeText(ImageListView.this,"Success",Toast.LENGTH_LONG).show();
    CustomList customList = new CustomList(getActivity(),GetAllData.1,GetAllData.2,GetAllData.3,GetAllData.4,GetAllData.5,GetAllData.6);
    listView1.setAdapter(customList);
}

@Override
protected Void doInBackground(Void... voids) {
    try {
        getAllData.getAllImages();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}

} GetImages getImages = new GetImages(); getImages.execute();

}

private void getURLs() { class GetURLs extends AsyncTask<String,Void,String>{ ProgressDialog loading;

@Override
protected void onPreExecute() {
    super.onPreExecute();
    loading = ProgressDialog.show(getActivity(),"Loading...","Please Wait...",true,true);
}

@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    loading.dismiss();
    getAllData = new GetAllData(s);
    getImages();
}

@Override
protected String doInBackground(String... strings) {
    BufferedReader bufferedReader = null;
    try {
        URL url = new URL(strings[0]);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        StringBuilder sb = new StringBuilder();

        bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

        String json;
        while((json = bufferedReader.readLine())!= null){
            sb.append(json+"\n");
        }

        return sb.toString().trim();

    }catch(Exception e){
        return null;
    }
}

} GetURLs gu = new GetURLs(); gu.execute(GET_IMAGE_URL); }

Die classes CustomList und GetAllData werden nicht benötigt, da die CustomList die Listview nur mit Details versorgt und GetAllData nur die Daten über ein PHP Script zieht.

Ich will keine RecyclerView verwenden!

Das Hauptgeschehen mit der Listview spielt sich in dieser classe ab.

...zur Frage

Java - nicht überschreiben

Hey Leute,

möchte einen kleinen Taschenrechner mit JFrame programmieren. Dazu nutze ich z. B. einen Button, welcher das Attribut Text mit dem Wert "+" hat.

Wenn ich auf den Button klicke, also

public void mouseClicked(MouseEvent e) {
                          
                    textField.setText(plus);
            }

dann wird durch die Methode setText der Parameter plus von der Instanzvariable String plus = "+"; an das textField natürlich der String plus mit dem Wert "+" übergeben.

Wenn ich davor z. B. in das textField einen Integer bzw. ein Double reinschreibe und dann oberes mouseClicked ausführe, dann überschreibt er logischerweise den Integer- bzw. Doublewert und es wird wieder das "+" gesetzt.

Meine Frage: Wie kann ich einen Integer- bzw. einen Doublewert in das textField setzen, dann auf den Button klicke und das "+" dann den Wert nicht überschreibt, sondern neben den Integer- bzw. Doublewert erscheint?

Freue mich auf eure Antworten!

LG Nuke1818

...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

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?