QTableWidget的;使用celllChanged信号

时间:2012-01-30 18:21:33

标签: c++ qt user-interface cell qtablewidget

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

my 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);
    }

}

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

1 个答案:

答案 0 :(得分:2)

您的信号插槽签名不同。在您的void addWeightSum(int &row, int &col); 声明中 你已经把参考。删除它们。 void addWeightSum(int row, int col);