0

Qt4とQtCreatorを使用しています。UIのプログレスバーにカスタムスロットを書き込むことができません。UIファイルに特定のウィジェットのカスタムスロットを作成するにはどうすればよいですか?私のシナリオでは、シグナルはui要素からのものではありません。

次のコードは、実行中にエラーを生成します。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QFile>
#include<QFileInfo>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_btcopy_clicked();
    void on_btquit_clicked();
    void ChangeValue(qint64 val);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_btcopy_clicked()
{
    QFileInfo *qfi=new QFileInfo("C:\\Users\\kiran\\Desktop\\test\\a.iso");
    qDebug("%d" ,qfi->size());
    QFile *qf=new QFile();
    QFile fromFile("C:\\Users\\kiran\\Desktop\\test\\a.iso");
    QFile toFile("C:\\Users\\kiran\\Desktop\\test\\b.iso");
    ui->pbar->setMaximum(fromFile.size());
    fromFile.copy(toFile.fileName());

    connect(&toFile, SIGNAL(bytesWritten(qint64)), ui->pbar, SLOT(CangeValue(qint64)));
    qDebug("completed");
}

void MainWindow::on_btquit_clicked()
{
   exit(0);
}

void MainWindow::CangeValue(qint64 val)
{
    ui->pbar->setValue(val);
}

エラーメッセージ

Object::connect: No such slot ProgressBar::CangeValue(qint64)in..\untitled\mainwindow.cpp:26
    Object::connect:  (receiver name: 'pbar')
4

1 に答える 1

5

CangeValueはメインウィンドウのスロットです(記録のために:と呼ばれる必要がありますChangeValue)。

したがって、connect(..)ステートメントの3番目のパラメーターは、プログレスバーではなく、メインウィンドウである必要があります。connectステートメントでui->pbarbyに置き換えます。this

于 2012-11-26T11:52:06.797 に答える