点击时如何获取动态添加的QPushButton的文本

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

我在

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

button = new QPushButton("someText");
button->setParent(ui->scrollArea);
button->setCheckable(true);
button->show();

我用了

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

qt qpushbutton qt-signals
3个回答
1
投票

G.M. 说:

就其价值而言,听起来您可能希望在调用 connect 时使用 lambda 作为插槽。

单击时获取任何

QPushButton
文本的一种方法是将其
clicked()
插槽连接到存储按钮文本的 lambda,例如在
QString
中:

QPushButton button = new QPushButton();
button->setText("some text");
QString buttonText;

QObject::connect(button,&QPushButton::clicked,[=](){ buttonText = button->text(); qDebug()<<buttonText; });

qDebug
只是为了确认按钮的文本已存储在
buttonText
中,用于调试目的。


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 上运行。


0
投票
button = new QPushButton();
button->setText(str);
button->setFixedSize(100, 50);
button->setParent(ui->scrollArea);

globalButtonName = str;

QString buttonName = str;
QSqlQuery insertQuery;
insertQuery.prepare("INSERT INTO pushbutton (name,led) VALUES (:name,:text)");  
insertQuery.bindValue(":name", buttonName);
insertQuery.bindValue(":text", text);
if (!insertQuery.exec())
{
    qDebug() << "Failed to insert data into database!";
    return;
}
int buttonWidth = button->width();
int buttonHeight = button->height();
int numRows = ui->scrollArea->width() / (buttonWidth);
int row = ui->scrollArea->findChildren<QPushButton*>().count() / numRows;
int col = ui->scrollArea->findChildren<QPushButton*>().count() % numRows;
QPoint buttonPos = QPoint(col * (buttonWidth +10), row * (buttonHeight +10));

button->move(buttonPos);
button->setCheckable(true);
button->show();

QObject::connect(button, &QPushButton::clicked, [=]() { globalButtonName = buttonName;});
© www.soinside.com 2019 - 2024. All rights reserved.