QTableWidget; Использование сигнала celllChanged - PullRequest
1 голос
/ 30 января 2012

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

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

Я неоднократно проверял, что этот слот действительно существует и правильно назван, насколько мне известно. Однако я студент и, возможно, я не прав, и теперь я здесь.

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

myjectiondialog.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 Ответ

2 голосов
/ 30 января 2012

Вы подписываете подписи слотов отличаются В вашей декларации void addWeightSum(int &row, int &col); Вы положили ссылки. Удалить их. void addWeightSum(int row, int col);

...