Qt4中的信号和插槽 - 不工作
Posted
技术标签:
【中文标题】Qt4中的信号和插槽 - 不工作【英文标题】:Signal and Slot in Qt4 - not working 【发布时间】:2012-11-26 11:48:38 【问题描述】:我正在使用 Qt4 和 Qt Creator。我无法将自定义插槽写入 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')
【问题讨论】:
您假设在执行 QFile::copy 时会发出任何内容。它不会。它将在文件系统上执行同步复制,而不会通知您进度。 【参考方案1】:CangeValue
是 MainWindow 中的一个插槽(记录:它应该称为 ChangeValue
)。
因此,connect(..)
语句中的第三个参数必须是主窗口,而不是进度条。在您的连接语句中将ui->pbar
替换为this
。
【讨论】:
我更改了它。但是在复制插槽时不起作用。您能帮帮我吗? 将qDebug("slot is called");
添加到您的槽中,看看它是否真的被调用了。如果 is 被调用,您可能需要在 setValue
调用之后添加 QApplication::processEvents( QEventLoop::ExcludeUserInputEvents );
我刚刚看到你在调用copy
之后执行connect
。改变这两个的顺序。在复制整个文件之前,copy
的调用不会返回。以上是关于Qt4中的信号和插槽 - 不工作的主要内容,如果未能解决你的问题,请参考以下文章
C++ 和 QT4.5 - 传递 const int& 过大?通过引用传递是不是有助于信号/插槽?