连接QPushButton Jambi

时间:2016-04-19 04:33:00

标签: java qt qt-jambi jambi

我是Java编程的新手。我编写了下面列出的应用程序,但我无法将按钮连接到我的功能。知道我做错了吗?

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");
    }

}

当我调用像SumNum(5,3);这样的函数时,它运行得很好,但是当我从按钮调用它时,它不起作用。我正在使用new_action.released.connect("Tata()");

我看了Qt,它给了我 void com.trolltech.qt.QSignalEmitter.AbstractSignal.connect(Object receiver, String method)但什么是对象接收器?

我甚至将自己作为对象接收者,new_action.released.connect(new_action,"Tata()");,但是,不,它也不起作用。

有什么想法吗?

编辑:这里是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()
在Python中它没有要求Object接收器,它只是运行它,但在java中看起来完全不同。

1 个答案:

答案 0 :(得分:1)

正如Smar所说的那样,它需要循环运行,所以我从QWidget扩展,初始Application()中的设置,在initUI()中设置布局并在main()中运行{1}}。

import com.trolltech.qt.core.*;
import com.trolltech.qt.gui.*;

public class Application extends QWidget {

    public Application() {

        setWindowTitle("Simple Example");
        setMinimumHeight(100);
        setMinimumWidth(100);
        setGeometry(250, 250, 350, 100);

        initUI();

        show();
    }

    private void initUI() {

        QHBoxLayout main_layout = new QHBoxLayout(this);

        QPushButton new_action = new QPushButton("Working");
        new_action.released.connect(this,"Tata()");
        main_layout.addWidget(new_action);

    }

    private void Tata(){
        System.out.println("Yes, it's Working");
    }

    public static void main(String[] args) {
        QApplication.initialize(args);
        new Application();
        QApplication.execStatic();
        QApplication.shutdown();
    }
}

因为我从QWidget延伸,所以我只需要像QHBoxLayout main_layout = new QHBoxLayout(this);那样设置布局。注意这个
以及连接按钮new_action.released.connect(this,"Tata()");对象接收器就是这个或另一个单词当前QWidget

它与Python完全相同,只是python使用self而Java使用this

这对我有用,希望有帮助,但有同样的问题。