c++ - 连接 -> 窗口上没有这样的插槽

标签 c++ qt qt-designer

我正在创建一个 Qt Designer 力计算程序,原理是在 QDoubleSpinBox 上给出输入值并通过一种方法进行计算,当我尝试连接一个按钮以激活计算时,我得到一个“没有这样的插槽错误"

我确保在 .h 文件中声明了公共(public)槽,但它仍然没有提供任何东西,“Lunghezza”函数是进行计算的函数

头文件:Window.h

class Window;
}

class Window : public QMainWindow
{
    Q_OBJECT

public:
    explicit Window(QWidget *parent = nullptr);
    ~Window();

public slots:


  void Lunghezze(double Longeur1 , double Longeur2 , double Largeur , double Hauteur,double *T1 ,double *T2 , double *T3 ,double *T4);


private:
    Ui::Window *ui;
};

我的cpp文件Window.cpp

    QMainWindow(parent),
    ui(new Ui::Window)

{

    ui->setupUi(this);


double L1=ui->L1ValF->value();
double L2=ui->L2ValF->value();       // Getting the value from QDoubleSpinBox
double l=ui->lValF->value();
double H=ui->HValF->value();
double F=ui->FValF->value();

   connect(ui->Calculate, SIGNAL(clicked()),SLOT(Lunghezze(L1,L2,l,H,F,0,0,0,0)));


}


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


void Window::Lunghezze(double Longeur1 , double Longeur2 , double Largeur , double Hauteur,double *T1 ,double *T2 , double *T3 ,double *T4){

float C1=hypot(Longeur1,Largeur/2);
float C2=hypot(Longeur1,Largeur/2);
float C3=hypot(Longeur2,Largeur/2);
float C4=hypot(Longeur2,Largeur/2);
                                                // CALCOLO LUNGHEZZA FILI
*T1=hypot(C1,Hauteur);
*T2=hypot(C2,Hauteur);
*T3=hypot(C3,Hauteur);
*T4=hypot(C4,Hauteur);

}

我也删除了 moc 和 .o 文件,但仍然收到此消息!

QObject::connect: No such slot Window::Lunghezze(L1,L2,l,H,F,0,0,0,0) in ../calculo16/window.cpp:23 QObject::connect: (sender name:
'Calculate') QObject::connect: (receiver name: 'Window')

最佳答案

使用 lambda 和现代形式的 QObject 槽连接:

connect(ui->Calculate, &QPushButton::clicked, this, [=]() {
  Lunghezze(L1,L2,l,H,F,0,0,0,0);
});

请注意,这将在构建时捕获 L1、L2... 的值。如果您想在单击按钮时获取它们,请将 ...->value 调用移到 lambda 中。

或者,向 Window 添加一个新插槽(无参数):

void Window::on_Calculate_clicked() {
 double L1=ui->L1ValF->value();
  double L2=ui->L2ValF->value();
  double l=ui->lValF->value();
  double H=ui->HValF->value();
  double F=ui->FValF->value();
  Lunghezze(L1,L2,l,H,F,0,0,0,0);
}

此名称应启用 signal-slot auto-connection ,但您始终可以手动连接它。

关于c++ - 连接 -> 窗口上没有这样的插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673665/

相关文章:

c++ - 如何访问碰撞的 assimp 模型数据?

c++ - 使用 OpenCV 查找图像中两点之间的角度

c++ - QML:多次按下/释放后某些键未处理

c++ - 如何将 ui 文件类中的按钮连接到其他类中的插槽?

c++ - 无法动态更新 LineSeries QML 类型

具有模板化类型结构问题的 C++ 函数模板参数

c++ - 用于测试 std::vector 内容的 Oneliner

linux - Qt Designer on Linux 安装 PySide2(Qt for Python)在哪里?

qt-designer - PySide6在使用 `QMetaObject.connectSlotsByName(MainWindow)`时如何使用 `QUiLoader().load(...)`

c++ - 在 Qt Creator IDE 中创建表单