Виджет QTable; Использование сигнала celllChanged

Я студент-программист, использующий Qt для разработки графического интерфейса для работы, и я столкнулся с проблемой при использовании QTableWidget. У меня есть электронная таблица, созданная из этого виджета, которая принимает различные значения в качестве пользовательского ввода. У меня есть поле QLineedit за пределами этой электронной таблицы, которое должно отображать сумму любых значений в 9-м столбце. В этом случае я подумал, что лучше всего использовать сигнал cellchanged, чтобы добавить 9-й столбец вместе и показать, что поле lineedit равно сумме всех этих ячеек. Моя проблема в том, что когда я запускаю свое приложение, я получаю следующий вывод приложения, и эта часть в моем графическом интерфейсе не работает:

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

мой инъекцияdialog.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);
    }

}

Эта проблема может быть вызвана чем-то простым, чего я просто не вижу. Я ценю любую помощь, которую вы можете предложить. Пожалуйста, оставляйте только конструктивные отзывы, так как я заинтересован только в улучшении и достижении моих целей здесь. В связи с этим я ценю все попытки помочь и благодарю вас за чтение этого.


person Wylie Coyote SG.    schedule 30.01.2012    source источник
comment
Я не очень разбираюсь в Qt, но, возможно, проблема в ссылках. Вы пытались переписать addWeightSum, чтобы аргументы передавались по значению, а не по ссылке?   -  person Nobody moving away from SE    schedule 30.01.2012
comment
Действительно, я сделал, та же проблема ... что заставляет меня думать, что приложение даже не зашло так далеко. потому что у меня должна быть ошибка с одним из этих методов параметров   -  person Wylie Coyote SG.    schedule 30.01.2012
comment
Вы чистили проект? Возможно, ваша среда сборки каким-то образом загрязнена старыми двоичными файлами, которые вносят ошибки. Хотя это крайне маловероятно.   -  person Nobody moving away from SE    schedule 30.01.2012
comment
Я согласен с Никто. Иногда вы, если не пересобираете Qt с нуля, могут преподнести неожиданные сюрпризы.   -  person Neox    schedule 30.01.2012
comment
Передача аргументов по ссылке в слоте бесполезна при использовании соединения в любом случае...   -  person UmNyobe    schedule 31.01.2012


Ответы (1)


Вы различаете сигнатуры сигнальных слотов. В вашем объявлении void addWeightSum(int &row, int &col); вы поместили ссылки. Удалить их. void addWeightSum(int row, int col);

person Neox    schedule 30.01.2012
comment
Я не вижу, где подписи отличаются; Я также думал, что мне нужно ссылаться на это значение, потому что оно происходит из сигнала cellchanged. Я удалил свой & и выполнил очистку перед компиляцией, и я все еще получаю один и тот же вывод приложения каждый раз, когда запускаю диалоговое окно. - person Wylie Coyote SG.; 30.01.2012
comment
Это меня удивило бы, можете ли вы опубликовать обновленный заголовок для своего класса? - person Neox; 30.01.2012
comment
Я действительно решил это; Проблема заключалась в параметрах оператора подключения. Почему-то работает только с int, int в обоих наборах параметров. Странный. Спасибо за вашу помощь. - person Wylie Coyote SG.; 31.01.2012