QT如何向按钮添加动作

时间:2013-05-25 17:31:22

标签: qt

我对QT很新,在阅读完文档之后,我仍然无法从同一个类中获得一个按钮调用方法。任何人都可以帮助或指出我错在哪里?

    #include "GUI.h"
    GUI::GUI() {
    window = new QWidget();
    QGridLayout * layout = new QGridLayout;

    //Sukuriami procesų label'iai

    QLabel * startStopLabel = new QLabel("Start_Stop");
    QLabel * readUILabel = new QLabel("ReadUI");
    QLabel * jclLabel = new QLabel("JCL");
    QLabel * dataToOutputLabel = new QLabel("DataToOutput");
    QLabel * inputToRamLabel = new QLabel("InputToRam");
      QLabel * mainProcLabel = new QLabel("MainProc");
      QLabel * jobGovernorLabel = new QLabel("JobGovernor");
      QLabel * loaderLabel = new QLabel("Loader");
     QLabel * virtualMachineLabel = new QLabel("VirtualMachine");
      QLabel * interruptLabel = new QLabel("Interrupt");
      QLabel * printErrorLabel = new QLabel("PrintError");

      //Sukuriami procesų laukai duomenų išvedimui

      startStop = new QTextBrowser();
      readUI = new QTextBrowser();
      jcl = new QTextBrowser();
      dataToOutput = new QTextBrowser();  
      inputToRam = new QTextBrowser();
      mainProc = new QTextBrowser();
      jobGovernor = new QTextBrowser();
      loader = new QTextBrowser();
      virtualMachine = new QTextBrowser();
      interrupt = new QTextBrowser();
      printError = new QTextBrowser();


      forward = new QPushButton();
      addAction();
         connect(forward, SIGNAL(clicked()), this , SLOT(addText()));
     // QPushButton * newJob = new QPushButton();
     // QPushButton * cancel = new QPushButton();

     // QAction * action;
          QMainWindow * window2 = new QMainWindow();




      //layout tvarkymas

      layout->addWidget(startStopLabel, 0, 0, Qt::AlignHCenter);
      layout->addWidget(readUILabel, 0, 1, Qt::AlignHCenter);
      layout->addWidget(jclLabel, 0, 2, Qt::AlignHCenter);
      layout->addWidget(dataToOutputLabel, 0, 3, Qt::AlignHCenter);
      layout->addWidget(startStop, 1, 0);
      layout->addWidget(readUI, 1, 1);
      layout->addWidget(jcl, 1, 2);
      layout->addWidget(dataToOutput, 1, 3);
      layout->addWidget(inputToRamLabel, 2, 0, Qt::AlignHCenter);
     layout->addWidget(mainProcLabel, 2, 1, Qt::AlignHCenter);
      layout->addWidget(jobGovernorLabel, 2, 2, Qt::AlignHCenter);
      layout->addWidget(loaderLabel, 2, 3, Qt::AlignHCenter);
      layout->addWidget(inputToRam, 3, 0);
      layout->addWidget(mainProc, 3, 1);
      layout->addWidget(jobGovernor, 3, 2);
      layout->addWidget(loader, 3, 3);
      layout->addWidget(virtualMachineLabel, 4, 0, Qt::AlignHCenter);
      layout->addWidget(interruptLabel, 4, 1, Qt::AlignHCenter);
      layout->addWidget(printErrorLabel, 4, 2, Qt::AlignHCenter);
      layout->addWidget(virtualMachine, 5, 0);
      layout->addWidget(interrupt, 5, 1);
      layout->addWidget(printError, 5, 2);
      layout->addWidget(forward, 5, 3);


      window->setLayout(layout);
      window->setWindowState(Qt::WindowMaximized);
      window->setWindowTitle("AutoMagic");
      window->setWindowIcon(QIcon("kiriya.jpg"));

     window->show();
    }

    GUI::~GUI() {
    }

    void GUI::addText(){

        startStop->append("works");
        window->repaint();
    } 

和gui.h

    class GUI: public QMainWindow {

        Q_OBJECT

      QWidget * window;  
      QTextBrowser * startStop;
      QTextBrowser * readUI;
      QTextBrowser * jcl;
      QTextBrowser * dataToOutput;  
      QTextBrowser * inputToRam;
      QTextBrowser * mainProc;
      QTextBrowser * jobGovernor;
      QTextBrowser * loader;
      QTextBrowser * virtualMachine;
     QTextBrowser * interrupt;
     QTextBrowser * printError;
     QPushButton * forward;

    public:
        GUI();
        virtual ~GUI();
        void addText();
        void addAction();
    private:

    }; 

如果有人能帮我理解这一部分,我将不胜感激。

3 个答案:

答案 0 :(得分:2)

您必须完全理解信号和插槽(它们用于对象之间的通信)。这种机制是Qt的核心特征,可能是与其他框架提供的功能大不相同的部分。

阅读这篇解释其基础知识的文章:

http://qt-project.org/doc/qt-4.8/signalsandslots.html

答案 1 :(得分:1)

您需要了解Qr的信号和插槽机制。 最简单的起点是Qt附带的示例程序之一。

像任何事件驱动的gui程序一样,它起初似乎很复杂,但它可能是实际使用的最简单的机制之一

答案 2 :(得分:1)

connect ( ui->pushButton, SIGNAL( clicked() ), this, SLOT( pushButtonClicked() ) );

pushButtonClicked()是您定义的函数。