[英]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
腳本中。
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機制?
在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.