c++ - 在 SLOT 的参数中传递一个小部件
问题描述
这就是我想要做的:我有一个 QLineEdit 和一个 QPushButton。当我按下按钮时,我想检索 QLineEdit 的文本并用它做一些事情。不幸的是,我很难做到这一点,因为我是 Qt 的新手。
我的 mainwindow.cpp (简化):
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QLineEdit *textInput = new QLineEdit();
QPushButton *awesomeButton = new QPushButton();
retrieveButton->setText("Click me");
connect(awesomeButton, SIGNAL(released()), this, SLOT(awesomeFunction(QLineEdit)));
}
void MainWindow::awesomeFunction(QLineEdit myQLineEdit) {
QString exploitedText = myQLineEdit.text();
//DO STUFF
}
我的主窗口.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLineEdit>
#include <QPushButton>
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 awesomeFunction(QLineEdit myQLineEdit);
private:
QPushButton *awesomeButton;
QLineEdit *textInput;
Ui::MainWindow *ui;
};
#endif
中没有什么有趣的main.cpp
。我错过了一些东西,但我不知道是什么。当我在没有任何参数的情况下使用它时,它可以正常工作。但是当我尝试在参数中传递一个小部件时它不起作用。文档做得很好,但我可以设法通过互联网找到我需要的东西。
解决方案
显示的代码有几个问题。首先QObject
,暗示从它继承的任何东西都是不可复制的,所以你不能通过QLineEdit
值传递:你需要通过引用/指针传递。
其次线...
connect(awesomeButton, SIGNAL(released()), this, SLOT(awesomeFunction(QLineEdit)));
应该在控制台上发出运行时警告,因为插槽需要一个参数——QLineEdit
但QPushButton::released
信号没有提供一个参数。
假设QLineEdit
您感兴趣,textInput
那么您可以使用新的 Qt5 信号/插槽语法和lambda
. 所以把awesomeButton
签名改成...
void awesomeFunction(QLineEdit *myQLineEdit);
然后使用(未经测试)连接到信号...
connect(awesomeButton, &QPushButton::released, this,
[this, textInput]()
{
awesomeFunction(textInput);
});
推荐阅读
- excel - 使用 VBA 将所有命名范围复制到另一个工作簿
- mysql - 使用 Backtic 选择查询不适用于 MySql v5.7.31
- file - Azure DataFactory 可以直接重命名文件吗?
- python - 每组 seaborn countplot 的计数和色调百分比
- javascript - 使用 testcafe 将文本写入文件
- c++ - 1D Heat Equation using DFT produces incorrect results (FFTW)
- css - 如何将数据表标题保留在一行中?
- java - 对于下面的程序,我想打印重复的元素 5,6,1 但是当数组有一些没有 3 倍时它没有提供正确的输出
- java - 为什么在抛出 NullPointerException 后 @Transactional 不回滚?
- flutter - 如何使用自己的 onPressed 函数删除按钮