我在 QScrollarea 中动态添加了一组按钮,但我想通过单击或触摸获取该特定按钮的文本。
我使用了按钮->文本();和 button->currentText();。但它给出了最后添加的按钮的文本,而不是单击按钮的文本。
button->setCheckable(true); button->show(); QString buttonText = button->text();
好吧,它并不完美,我相信会有更好的方法,但这会在滚动区域内的垂直布局中添加四个按钮,当您单击每个按钮时,它将在调试窗口中显示按钮文本,这可以进行调整以将其发送到您想要的任何地方。
主窗口.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 上运行。