1

仕事用の GUI を開発するために Qt を使用している学生プログラマーで、QTableWidget を使用して問題に遭遇しました。ユーザー入力としてさまざまな値を取るこのウィジェットから作成されたスプレッドシートがあります。このスプレッドシートの外に QLineedit フィールドがあり、9 列目に値の合計を表示する必要があります。この場合、 cellchanged シグナルを使用して 9 番目の列を追加し、これらすべてのセルの合計に linenit フィールドを設定するのが最善だと考えました。私の問題は、アプリケーションを実行しようとすると、次のアプリケーション出力が表示され、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);
    }

}

この問題は、私が見ていない単純な何かが原因である可能性があります。あなたが提供できる助けに感謝します。ここでの目標の改善と達成にのみ関心があるため、建設的なフィードバックのみを残してください. その点で、私は支援するすべての試みに感謝し、これを読んでくれてありがとう.

4

1 に答える 1

2

スロット署名が異なることを通知します。あなたの宣言ではvoid addWeightSum(int &row, int &col); 、参照を入れています。それらを削除します。void addWeightSum(int row, int col);

于 2012-01-30T18:34:14.420 に答える