Ich bin ziemlich neu in Java-Programmierung. Ich habe die folgende Anwendung geschrieben, aber ich kann die Taste nicht mit meiner Funktion verbinden. Irgendeine Idee, was ich falsch mache?Verbinden QPushButton Jambi
package com.teat;
import com.trolltech.qt.gui.*;
public class Application
{
public static void main(String[] args)
{
QApplication.initialize(args);
QWidget mainWidget = new QWidget();
mainWidget.setWindowTitle("Simple Example");
QHBoxLayout main_layout = new QHBoxLayout();
mainWidget.setLayout(main_layout);
QPushButton new_action = new QPushButton("Working");
new_action.released.connect("Tata()");
main_layout.addWidget(new_action);
SumNum(5,3);
mainWidget.show();
QApplication.execStatic();
QApplication.shutdown();
}
private static int SumNum(int num1,int num2)
{
int sum = num1 + num2;
System.out.println(sum);
return sum;
}
private static void Tata(){
System.out.println("Yes, it's Working");
}
}
Wenn ich die Funktion wie SumNum(5,3);
nennen es perfekt funktioniert, aber wenn ich es aus Taste aufrufen, Es funktioniert nicht. Ich verwende new_action.released.connect("Tata()");
ich in Qt haben gesucht, es gibt mir
void com.trolltech.qt.QSignalEmitter.AbstractSignal.connect(Object receiver, String method)
aber was ist Object-Empfänger?
Ich gebe sogar selbst als Objekt Empfänger, new_action.released.connect(new_action,"Tata()");
, aber, nein, es hat auch nicht funktioniert.
Irgendeine Idee?
Edit: hier die gleiche Anwendung in Python:
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.setWindowTitle('Simple Example')
main_layout = QtGui.QHBoxLayout()
self.setLayout(main_layout)
new_action = QtGui.QPushButton("Working")
new_action.released.connect(self.Tata)
main_layout.addWidget(new_action)
self.show()
def SumNum(self, num1, num2):
print num1+num2
return num1+num2
def Tata(self):
print "Yes, it's Working"
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
in Python nicht für Objekt Empfänger gefragt hat, und es führt Sie es einfach, aber in Java wie es scheint, ganz anders.
Qt soll innerhalb der Ereignisschleife verwendet werden, so dass das Problem auftreten kann. Mit Ereignisschleife meine ich die Schleife, die von 'execStatic()' hier gestartet wird. Eine einfache Möglichkeit, dies zu tun, ist, die Klasse QWidget zu unterteilen und sie als 'mainWidget' zu verwenden. So wird es 'mainWidget.show()' und 'QApplication.execStatic()' immer noch geben, aber der ganze andere Anwendungscode ist in der Anwendung. – Smar
@Smar Ich habe meine Frage bearbeitet, hinzugefügt Python Beispiel, wie Sie gesagt haben, ich muss separate Klasse machen und führen Sie es aus der Hauptklasse, genau wie es ist in Python Beispiel, richtig? Und was ist mit einem Objektempfänger? Wofür ist das? – Bear
Ich sehe, du hast es geschafft, dein Problem zu lösen :) Gibt es noch offene Fragen? Wenn nicht, bitte akzeptiere einfach deine Antwort, nachdem du dazu in der Lage bist :) – Smar