簡體   English   中英

我如何從按Qt的按鈕運行命令-C ++

[英]How do I run a command from a button press Qt - C++ probably

當我試圖完成一個程序,並且想要一個圖形界面時,我試圖非常快速地重建QT Creator提供的QT應用程序。 以下是我希望的相關內容:

arrowpad.h

#ifndef ARROWPAD_H
#define ARROWPAD_H

#include <QWidget>

QT_BEGIN_NAMESPACE
class QPushButton;
QT_END_NAMESPACE

//! [0]
class ArrowPad : public QWidget
//! [0] //! [1]
{
//! [1] //! [2]
    Q_OBJECT
//! [2]

public:
    ArrowPad(QWidget *parent = 0);

private:
    QPushButton *upButton;
    QPushButton *downButton;
    QPushButton *leftButton;
    QPushButton *rightButton;
};

#endif

arrowpad.cpp

#include <QtGui>

#include "arrowpad.h"

ArrowPad::ArrowPad(QWidget *parent)
    : QWidget(parent)
{
//! [0]
    upButton = new QPushButton(tr("&Up"));
//! [0] //! [1]
    downButton = new QPushButton(tr("&Down"));
//! [1] //! [2]
    leftButton = new QPushButton(tr("&Left"));
//! [2] //! [3]
    rightButton = new QPushButton(tr("&Right"));
//! [3]

    QGridLayout *mainLayout = new QGridLayout;
    mainLayout->addWidget(upButton, 0, 1);
    mainLayout->addWidget(leftButton, 1, 0);
    mainLayout->addWidget(rightButton, 1, 2);
    mainLayout->addWidget(downButton, 2, 1);
    setLayout(mainLayout);
}

當我按下按鈕時,如何獲得運行命令的命令? 我已經找到 ,但是我不知道如何與qpushbutton集成在一起,否則它只是認為它是一串文本... 任何命令都必須在LINUX上工作-FEDORA 19,因為那是我正在運行的命令上。

這是當前的結果-我認為按鈕名稱沒有指定為(tr("&Up")); 順便說一下,在上面的.cpp腳本中。

qt應用

Apartidge是正確的,但要加上它並將多個按鈕連接到同一個功能,您只需要連接正確的信號和插槽。

對於你的例子:

connect(upButton, SIGNAL(clicked()), this, SLOT(onButtonPressed()));
connect(downButton, SIGNAL(clicked()), this, SLOT(onButtonPressed()));
connect(leftButton, SIGNAL(clicked()), this, SLOT(onSomeOtherButtonPressed()));
connect(rightButton, SIGNAL(clicked()), this, SLOT(onYetAnotherButtonPressed()));

將它放在構造函數中會將upButton和downButton連接到同一個插槽onButtonPressed()。 leftButton將觸發onSomeOtherButtonPressed()和rightButton將觸發onYetAnotherButtonPressed()。

單擊該按鈕會發出pressed信號。 您必須做的是將此信號連接到插槽,然后在該插槽中執行操作。

例如,

ArrowPad::ArrowPad(QWidget *parent)
    : QWidget(parent)
{

    upButton = new QPushButton(tr("&Up"));
    connect(upButton, SIGNAL(clicked()), this, SLOT(onButtonPressed()));
    // And so on for the other buttons
}

void ArrowPad::onButtonPressed()
{
    // Button is pressed, do actions
}

你有沒有嘗試過理解SIGNAL和SLOT機制?

http://doc.qt.io/qt-4.8/signalsandslots.html

在qt中,大多數事情都是通過信號/時隙機制來完成的。 因此,您定義了一些插槽,只需將信號連接到它們即可。

arrowpad.h

#ifndef ARROWPAD_H
#define ARROWPAD_H

#include <QWidget>

QT_BEGIN_NAMESPACE
class QPushButton;
QT_END_NAMESPACE

//! [0]
class ArrowPad : public QWidget
//! [0] //! [1]
{
//! [1] //! [2]
    Q_OBJECT
//! [2]

public:
    ArrowPad(QWidget *parent = 0);

private:
    QPushButton *upButton;
    QPushButton *downButton;
    QPushButton *leftButton;
    QPushButton *rightButton;



// 1- Here you declare the slots
private slots:
 void onUpButtonClick();
 void onDownButtonClick();
 void onLeftButtonClick();
 void onRightButtonClick();
};

#endif

現在在arrowpad.cpp中

#include <QtGui>

#include "arrowpad.h"

ArrowPad::ArrowPad(QWidget *parent)
    : QWidget(parent)
{
//! [0]
    upButton = new QPushButton(tr("&Up"));
//! [0] //! [1]
    downButton = new QPushButton(tr("&Down"));
//! [1] //! [2]
    leftButton = new QPushButton(tr("&Left"));
//! [2] //! [3]
    rightButton = new QPushButton(tr("&Right"));
//! [3]

// 2- Connect signals to slots
  QObject::connect(upButton, signal(clicked()), this, slot(onUpButtonClick()));

  QObject::connect(downButton, signal(clicked()), this, slot(onDownButtonClick()));

  QObject::connect(rightButton, signal(clicked()), this, slot(onRightButtonClick()));

  QObject::connect(leftButton, signal(clicked()), this, slot(onLeftButtonClick()));


    QGridLayout *mainLayout = new QGridLayout;
    mainLayout->addWidget(upButton, 0, 1);
    mainLayout->addWidget(leftButton, 1, 0);
    mainLayout->addWidget(rightButton, 1, 2);
    mainLayout->addWidget(downButton, 2, 1);
    setLayout(mainLayout);
}

// 3- Define the slots
 void ArrowPad::onUpButtonClick()
{
   qDebug() << "onUpButtonClick clicked";
}
 void ArrowPad::onDownButtonClick()
{
   qDebug() << "onDownButtonClick clicked";
}
 void ArrowPad::onLeftButtonClick()
{
   qDebug() << "onLeftButtonClick clicked";
}
 void ArrowPad::onRightButtonClick()
{
   qDebug() << "onRightButtonClick clicked";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM