QTableWidget;使用 celllChanged 信号

发布于 2024-12-31 23:18:38 字数 3276 浏览 3 评论 0原文

我是一名学生程序员,使用 Qt 开发 GUI 来工作,并且在使用 QTableWidget 时遇到了问题。我有一个由这个小部件制作的电子表格,它采用各种值作为用户输入。我在此电子表格之外有一个 QLineedit 字段,需要显示第 9 列中任何值的总和。在这种情况下,我认为最好使用 cellchanged 信号< /a> 将第 9 列添加在一起并显示将 lineedit 字段设置为所有这些单元格的总和。我的问题是,当我执行我的应用程序时,我收到以下应用程序输出,而我的 GUI 中的这部分不起作用:

> Object::connect: No such slot InjectionDialog::addWeightSum(int,int)
> Object::connect:  (sender name:   'tableWidgetInjectionLocations')
> Object::connect:  (receiver name: 'InjectionDialog')

我已多次确保该插槽确实存在,并且据我所知正确调用。然而我是一名学生,也许我不对,但现在我在这里。

我的 InjectionDialog.h 包含以下插槽;

private slots:
    void accepted_Clicked();
    void cancel_Clicked();
    void useFluidiFileRdoBtn_Clicked();
    void useFluidSpecifiedValuesRdoBtn_Clicked();
    void useParticleiFileRdoBtn_Clicked();
    void useParticleSpecifiedValuesRdoBtn_Clicked();
    void particleInjectionRdoBtn_Clicked();
    void liquidDropletsRdoBtn_Clicked();
    void addWeightSum(int &row, int &col);

我的injectiondialog.cpp 包含以下内容。

InjectionDialog::InjectionDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::InjectionDialog)
{
    ui->setupUi(this);
    connect(ui->pushButtonAccept, SIGNAL(clicked()), this, SLOT(accepted_Clicked()));
    connect(ui->pushButtonCancel, SIGNAL(clicked()), this, SLOT(cancel_Clicked()));
    connect(ui->radioButtonUseiFileFluidInjection, SIGNAL(clicked()), this, SLOT(useFluidiFileRdoBtn_Clicked()));
    connect(ui->radioButtonUseSpecifiedValuesFluidInjection, SIGNAL(clicked()), this, SLOT(useFluidSpecifiedValuesRdoBtn_Clicked()));
    connect(ui->radioButtonUseiFileParticleInjection, SIGNAL(clicked()), this, SLOT(useParticleiFileRdoBtn_Clicked()));
    connect(ui->radioButtonUseSpecifiedValuesParitcleInjection, SIGNAL(clicked()), this, SLOT(useParticleSpecifiedValuesRdoBtn_Clicked()));
    connect(ui->tableWidgetInjectionLocations, SIGNAL(cellChanged(int,int)), this, SLOT(addWeightSum(int &row, int &col)));

我的注入对话框还包括添加此列的功能;如下:

void InjectionDialog::addWeightSum(int &row, int &col)
{
    double weightSum;
    double totalWeightSum;
    QString tempstr;
    bool check;
    if(col == 9)
    {
        for (int i = 0; i < ui->tableWidgetInjectionLocations->rowCount(); i++)
        {
            if (ui->tableWidgetInjectionLocations->item(i,9)->text() != "")
            {
                tempstr = ui->tableWidgetInjectionLocations->item(i,9)->text();
                weightSum = tempstr.toDouble(&check);
                if(check == false)
                {
                    ui->lineEditWeightSum->setText("Error");
                    break;
                }
                else
                {
                    totalWeightSum += weightSum;
                }
            }
        }
        ui->lineEditWeightSum->clear();
        tempstr.append(QString("%1").arg(totalWeightSum));
        ui->lineEditWeightSum->setText(tempstr);
    }

}

这个问题可能是由我没有看到的一些简单的事情引起的。我感谢您提供的任何帮助。请只留下建设性的反馈,因为我只对改进和实现我的目标感兴趣。在这方面,我感谢所有提供帮助的尝试,并感谢您阅读本文。

Im a student programmer using Qt to develop a GUI for work and I have ran into a problem using the QTableWidget. I have a spreadsheet made from this widget that takes various values as user input. I have a QLineedit field outside of this spreadsheet that needs to display a the sum of any values in the 9th column. In this case i thought it would be best to use the cellchanged signal to add the 9th column together and show set the linedit field to the sum of all these cells. My problem is when I go to execute my application I recieve the following application output and this part in my GUI doesnt work:

> Object::connect: No such slot InjectionDialog::addWeightSum(int,int)
> Object::connect:  (sender name:   'tableWidgetInjectionLocations')
> Object::connect:  (receiver name: 'InjectionDialog')

I have made sure many times that this slot does in fact exist and is called correctly to the best of my knowledge. However I am a student and maybe I am not right and now I'm here.

my InjectionDialog.h contains the following slots;

private slots:
    void accepted_Clicked();
    void cancel_Clicked();
    void useFluidiFileRdoBtn_Clicked();
    void useFluidSpecifiedValuesRdoBtn_Clicked();
    void useParticleiFileRdoBtn_Clicked();
    void useParticleSpecifiedValuesRdoBtn_Clicked();
    void particleInjectionRdoBtn_Clicked();
    void liquidDropletsRdoBtn_Clicked();
    void addWeightSum(int &row, int &col);

my injectiondialog.cpp contains the following.

InjectionDialog::InjectionDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::InjectionDialog)
{
    ui->setupUi(this);
    connect(ui->pushButtonAccept, SIGNAL(clicked()), this, SLOT(accepted_Clicked()));
    connect(ui->pushButtonCancel, SIGNAL(clicked()), this, SLOT(cancel_Clicked()));
    connect(ui->radioButtonUseiFileFluidInjection, SIGNAL(clicked()), this, SLOT(useFluidiFileRdoBtn_Clicked()));
    connect(ui->radioButtonUseSpecifiedValuesFluidInjection, SIGNAL(clicked()), this, SLOT(useFluidSpecifiedValuesRdoBtn_Clicked()));
    connect(ui->radioButtonUseiFileParticleInjection, SIGNAL(clicked()), this, SLOT(useParticleiFileRdoBtn_Clicked()));
    connect(ui->radioButtonUseSpecifiedValuesParitcleInjection, SIGNAL(clicked()), this, SLOT(useParticleSpecifiedValuesRdoBtn_Clicked()));
    connect(ui->tableWidgetInjectionLocations, SIGNAL(cellChanged(int,int)), this, SLOT(addWeightSum(int &row, int &col)));

My injection dialog also include my function for adding this column; it is as follows:

void InjectionDialog::addWeightSum(int &row, int &col)
{
    double weightSum;
    double totalWeightSum;
    QString tempstr;
    bool check;
    if(col == 9)
    {
        for (int i = 0; i < ui->tableWidgetInjectionLocations->rowCount(); i++)
        {
            if (ui->tableWidgetInjectionLocations->item(i,9)->text() != "")
            {
                tempstr = ui->tableWidgetInjectionLocations->item(i,9)->text();
                weightSum = tempstr.toDouble(&check);
                if(check == false)
                {
                    ui->lineEditWeightSum->setText("Error");
                    break;
                }
                else
                {
                    totalWeightSum += weightSum;
                }
            }
        }
        ui->lineEditWeightSum->clear();
        tempstr.append(QString("%1").arg(totalWeightSum));
        ui->lineEditWeightSum->setText(tempstr);
    }

}

This issue could be caused by something simple that I'm just not seeing. I appreciate any help that you can offer. Please only leave constructive feed back as I am only interested in improving and accomplishing my goals here. In that regard I appreciate all attempts to assist and thank you for reading this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅浅淡淡 2025-01-07 23:18:38

您的信号槽签名不同。在您的 void addWeightSum(int &row, int &col); 声明中

你已经放了参考文献。删除它们。 void addWeightSum(int row, int col);

You signal slot signatures differ. In your declaration of void addWeightSum(int &row, int &col);

you have put references. Remove them. void addWeightSum(int row, int col);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文