单击时如何获取动态添加的 Qpushbutton 的文本

问题描述 投票:0回答:1

我在 QScrollarea 中动态添加了一组按钮,但我想通过单击或触摸获取该特定按钮的文本。

我使用了按钮->文本();和 button->currentText();。但它给出了最后添加的按钮的文本,而不是单击按钮的文本。

  button->setCheckable(true); button->show(); QString buttonText = button->text();   

qt qt-creator qpushbutton
1个回答
0
投票

好吧,它并不完美,我相信会有更好的方法,但这会在滚动区域内的垂直布局中添加四个按钮,当您单击每个按钮时,它将在调试窗口中显示按钮文本,这可以进行调整以将其发送到您想要的任何地方。

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class QPushButton;

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

public slots:
    void handleClick1();
    void handleClick2();
    void handleClick3();
    void handleClick4();

private:
    Ui::MainWindow *ui;
    QPushButton *_pbTest1;
    QPushButton *_pbTest2;
    QPushButton *_pbTest3;
    QPushButton *_pbTest4;
};
#endif // MAINWINDOW_H

实现(MainWindow.cpp):

#include <QPushButton>
#include <QHBoxLayout>
#include <QDebug>

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , _pbTest1(new QPushButton)
    , _pbTest2(new QPushButton)
    , _pbTest3(new QPushButton)
    , _pbTest4(new QPushButton)
{
    ui->setupUi(this);
    _pbTest1->setText("Well I'm...");
    _pbTest2->setText("Back In Black...");
    _pbTest3->setText("I hit the sack...");
    _pbTest4->setText("It's good to be back...");

    auto layout = new QVBoxLayout(ui->scrollArea);

    layout->addWidget(_pbTest1);
    layout->addWidget(_pbTest2);
    layout->addWidget(_pbTest3);
    layout->addWidget(_pbTest4);

    connect(_pbTest1, &QPushButton::clicked, this, &MainWindow::handleClick1);
    connect(_pbTest2, &QPushButton::clicked, this, &MainWindow::handleClick2);
    connect(_pbTest3, &QPushButton::clicked, this, &MainWindow::handleClick3);
    connect(_pbTest4, &QPushButton::clicked, this, &MainWindow::handleClick4);
}

void MainWindow::handleClick1() {
    qDebug()<<_pbTest1->text();
}
void MainWindow::handleClick2() {
    qDebug()<<_pbTest2->text();
}

void MainWindow::handleClick3() {
    qDebug()<<_pbTest3->text();
}

void MainWindow::handleClick4() {
    qDebug()<<_pbTest4->text();
}


MainWindow::~MainWindow()
{
    delete _pbTest1;
    delete _pbTest2;
    delete _pbTest3;
    delete _pbTest4;
    delete ui;
}

Main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

将以下内容输出到调试窗口:

14:54:41: Starting /home/qt-book/build-PushButtonText-Desktop_Qt_5_12_12_GCC_64bit-Debug/PushButtonText...
"Well I'm..."
"Back In Black..."
"I hit the sack..."
"It's good to be back..."
14:54:46: /home/qt-book/build-PushButtonText-Desktop_Qt_5_12_12_GCC_64bit-Debug/PushButtonText exited with code 0

在 Ubuntu 20.04、QT 5.12.12 上运行。

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