ahuajjjj 2024-04-26 16:16 采纳率: 50%
浏览 2

(标签-ui|关键词-字符串)

提示widget.cpp:16:57: Cannot take the address of an rvalue of type 'void'

img


#include "widget.h"
#include "ui_widget.h"

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

    //连接信号与槽
    //四个参数:谁发出信号  发出什么信号  谁处理信号 怎么处理

    //当按下回车键时实现与点击确定button一样的功能
    connect(ui->cmdLineEdit,SIGNAL(returnPressed()),this,SLOT(on_commitButton_clicked()));

    connect(ui->cancelButton,&QPushButton::clicked,this,&Widget::on_cancelButton_clicked());

    connect(ui->browseButton,&QPushButton::clicked,[this]()
        {
        QMessageBox::information(this,"信息","点击浏览");
    });
}

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

void Widget::on_commitButton_clicked()
{
    //获取lineedit
   QString program = ui->cmdLineEdit->text();
    //QString类名 创建program对象(字符串对象)  指针ui指向.ui界面文件  通过ui访问界面文件里的cmdLineEdit的成员函数text,由此得到文本框里输入的数据
    //创建process对象
    QProcess *myProcess = new QProcess(this);
    myProcess->start(program);
}

void Widget::on_cancelButton_clicked()
{
    this->close();
}

请问如何解决

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-26 16:16
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,错误提示表明您试图取一个临时值(rvalue)的地址,这在C++中是不允许的。这个错误出现在connect()函数调用中的第二个参数,即信号的发送者。对于信号槽连接,通常情况下我们不需要传递信号发送者的引用,除非你需要在槽函数中操作信号发送者。

    针对您的代码,问题出在下面这一行:

    connect(ui->cancelButton,&QPushButton::clicked,this,&Widget::on_cancelButton_clicked());
    

    这里您尝试获取QPushButton::clicked信号的地址,但这个信号是一个成员函数指针,不是一个可寻址的对象。要解决这个问题,您可以直接使用槽函数的名字,去掉&运算符,如下所示:

    connect(ui->cancelButton, &QPushButton::clicked, this, &Widget::on_cancelButton_clicked);
    

    这样修改后,信号将自动关联到相应的槽函数,无需显式提供槽函数的地址。

    整个修复后的Widget类代码如下:

    #include "widget.h"
    #include "ui_widget.h"
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        // 连接信号与槽
        // 四个参数:谁发出信号  发出什么信号  谁处理信号 怎么处理
    
        // 当按下回车键时实现与点击确定button一样的功能
        connect(ui->cmdLineEdit, &QLineEdit::returnPressed, this, &Widget::on_commitButton_clicked);
    
        // 正确连接取消按钮的点击信号
        connect(ui->cancelButton, &QPushButton::clicked, this, &Widget::on_cancelButton_clicked);
    
        connect(ui->browseButton, &QPushButton::clicked, [this]() {
            QMessageBox::information(this, "信息", "点击浏览");
        });
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::on_commitButton_clicked()
    {
        // 获取lineedit
        QString program = ui->cmdLineEdit->text();
        // 创建process对象
        QProcess *myProcess = new QProcess(this);
        myProcess->start(program);
    }
    
    void Widget::on_cancelButton_clicked()
    {
        this->close();
    }
    

    这段代码应该可以正确编译并运行了。如果您还有其他问题,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月26日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。