如何在QT中使用CPP在单个按钮中使用两个或三个按钮的逻辑

问题描述 投票:-1回答:2

我是QT的开发人员,是初学者,这是按钮D的任务,下面是按钮A,B和C的代码。需要为按钮D编写代码,如果我们按按钮D,则应该执行A,B和C按钮的操作(一个接一个)。

 if(ui->radioButton_wake->isChecked()) // Button A
 {
     ui->label_lastCommand->setText("Last command: Wake");
     ui->progressBar->setMaximum(UPDATE_FREQUENCY * 122);
     pJMPX->RDS_Set_11A_Enable(true);
     progressTimer->start();
 }
 else if(ui->radioButton_beep->isChecked())  // Button B
 {
     ui->label_lastCommand->setText("Last command: Beep");
     ui->progressBar->setMaximum(UPDATE_FREQUENCY * (ui->doubleSpinBox_general->value() + 122));
     pJMPX->RDS_Set_11A_Enable(true);
     progressTimer->start();

     QTimer::singleShot(122000, this, [this](){
         pJMPX->RDS_Set_11A_data(0x0008, 0x0000);
     });
 }
 else if(ui->radioButton_beginPlayback->isChecked())  // Button c
 {
     ui->label_lastCommand->setText("Last command: Begin Playback");
     ui->progressBar->setMaximum(UPDATE_FREQUENCY * (ui->doubleSpinBox_general->value() + 122));
     pJMPX->RDS_Set_11A_Enable(true);
     progressTimer->start();

     QTimer::singleShot(122000, this, [this](){
         pJMPX->RDS_Set_11A_data(0x0005, 0x0000);
     });
 }
 else if(ui->radioButton->isChecked()) // Button D
 {
 // Code to execute operations of button A, B and C ( one after one ) ?
 }
 `````
c++ qt user-interface qt5 qtgui
2个回答
1
投票

我不知道您在哪里使用代码,但是与您提出的问题不匹配。我将回答实际提出的问题,而不是尝试修复代码。这就是在Qt中完成的方式。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void aSlot();
    void bSlot();
    void cSlot();
    void dSlot();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

和来源

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->pushButton,   &QPushButton::clicked, this, &MainWindow::aSlot);
    connect(ui->pushButton_2, &QPushButton::clicked, this, &MainWindow::bSlot);
    connect(ui->pushButton_3, &QPushButton::clicked, this, &MainWindow::cSlot);
    connect(ui->pushButton_4, &QPushButton::clicked, this, &MainWindow::dSlot);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::aSlot()
{
    ui->plainTextEdit->appendPlainText("aSlot() called\n");
}

void MainWindow::bSlot()
{
    ui->plainTextEdit->appendPlainText("bSlot() called\n");
}

void MainWindow::cSlot()
{
    ui->plainTextEdit->appendPlainText("cSlot() called\n");
}

void MainWindow::dSlot()
{
    aSlot();
    bSlot();
    cSlot();
}

screenshot of program running


0
投票

您应该看一下QButtonGroup。可以用按钮注册此类,以后单击一个即可调用单个功能buttonClicked。此函数的一个版本使用您在添加按钮时指定的标识符,另一个使用按钮对象本身。通过一个插槽,可以很容易地让一个类处理许多按钮。

© www.soinside.com 2019 - 2024. All rights reserved.