Подключить QPushButton Джамби

Я новичок в программировании на 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) но что такое Object Receiver?

Я даже отдаю себя получателем объекта, 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 он не запрашивает приемник объекта, и он просто запускает его, но в java это выглядит совершенно иначе.


person Bear    schedule 19.04.2016    source источник
comment
Qt предназначен для использования внутри цикла событий, так что это может быть проблемой. Под циклом событий я подразумеваю цикл, который здесь запускается execStatic(). Простой способ сделать это — создать подкласс QWidget и использовать его как mainWidget. Так что по-прежнему будут mainWidget.show() и QApplication.execStatic(), но весь остальной код приложения находится внутри приложения.   -  person Smar    schedule 19.04.2016
comment
@Smar, я отредактировал свой вопрос, добавил пример на Python, как вы сказали, мне нужно создать отдельный класс и выполнить его из основного класса, как в примере с Python, верно? также как насчет объектного приемника? для чего это?   -  person Bear    schedule 19.04.2016
comment
Я вижу, вам удалось решить вашу проблему :) Есть еще открытые вопросы? Если нет, просто примите свой ответ после того, как сможете :)   -  person Smar    schedule 20.04.2016
comment
@Smar, да, спасибо за помощь, я уверен, что позже у меня возникнут дополнительные вопросы. : D (также мне нужно подождать 21 час, после чего я могу принять свой ответ)   -  person Bear    schedule 20.04.2016


Ответы (1)


как сказал Смар, он должен работать в цикле, поэтому я расширяюсь от QWidget, инициализирую настройки в Application(), устанавливаю макет в initUI() и запускаю его в main().

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.

это то, что сработало для меня, надеюсь, что поможет, но с той же проблемой.

person Bear    schedule 19.04.2016