- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我进行一些计算的一个类和另一个包含带进度条的 GUI 的类之间,我在正确设置信号和插槽方面遇到了一些麻烦。我对 qt 的经验很少,所以我不太了解信号/插槽的工作方式。我尝试了一些手册和教程,但我仍然不知道如何设置它。
让我们调用进度条类mainwindow
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow: public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow*ui;
};
#endif // LOADING_H
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "calc.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->progressBar->setValue(0);
calc sender;
connect(&sender, SIGNAL( inprogress(int) ), ui->progressBar, SLOT( setValue(int) ) );
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
calc clc;
clc.doData();
}
信号从计算类发出,简称为calc
计算.h
#ifndef CALC_H
#define CALC_H
#include <QObject>
class calc : public QObject
{
Q_OBJECT
public:
calc(QObject *parent=0);
void doData();
void printResults(int t);
signals:
void inprogress(int progr);
};
#endif // CALC_H
计算器.cpp
#include "calc.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
int t = 0;
int t_end = 100;
int progr = 0;
void calc::printResults(int t)
{
progr = t;
emit inprogress(progr);
QCoreApplication::processEvents(); //Prevent GUI freeze.
}
void calc::doData()
{
for ( int i = 1; i <= t_end; i++ )
{
t++;
printResults(t);
qDebug()<<t;
}
}
calc::calc(QObject *parent)
{
}
Archiev part (code above edited) The compilation ends with this error: no matching function for call to 'loading::connect(calc*, const char*, QProgressBar*&, const char*) Do I use signals in correct way, or I misunderstand this concept? What's the >correct way to update value of progress bar during this calculations?
编辑: 代码编辑得更清楚,现在它显示当前问题 - 信号有效但对 qprogressbar 没有影响。
EDIT2: 现在可以工作了 - 函数必须调用 sender->doData()
。此外,正确的分配是 sender = new calc(this)
(将 calc *sender
添加到 mainwidnow.h 的私有(private)部分)。谢谢大家的帮助,特别是@eyllanesc 指出正确的方法!
最佳答案
只有从 QObject
继承的类才能有信号,此外它们必须有宏 Q_OBJECT
,因为这通过 MOC 创建连接所需的所有元类介于信号和槽之间。在你的情况下:
*.h
class calc: public QObject
{
Q_OBJECT
public:
calc(QObject *parent=0);
void signalProgress();
signals:
void inprogress();
};
*.cpp
[...]
calc::calc(QObject *parent): QObject(parent)
{
}
同时通过指针创建一个 calc 实例,因为垃圾收集器将在您使用构造函数后删除该数据。
*.h
private:
Ui::loading *ui;
calc *sender;
*.cpp
loading::loading(QWidget *parent) :
QDialog(parent),
ui(new Ui::loading)
{
ui->setupUi(this);
ui->progressBar->setValue(0);
sender = new calc(this);
connect(sender, SIGNAL( inprogress(int) ), ui->progressBar, SLOT( setValue(int) ) );
}
关于c++ - QProgressBar 连接类之间的进度 - "no matching function for call",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036452/
我正在尝试创建一个 QProgressBar 来指示执行一个我不知道执行前需要多长时间才能完成的操作。 现在我有以下内容 QProgressBar DLbar; DLbar.setMaximum(0)
我更新进度条的第一个天真是在我的循环中包含以下行,它正在执行处理,如下所示: while(data.hasMoreItems()) { doSomeProcessing(data.nextIt
我开发了自己的混合流密码,并且我使用 Qt 作为 GUI。最初我是在一个线程上写的,但它是一个流密码,在对大文件进行操作时使 GUI 功能失调。所以我将加密/解密转移到一个单独的 Qthread。另外
几天,也许几周,我一直在寻找我的应用程序中的内存泄漏。在找到这个之前,我没有找到它的位置: https://bugs.kde.org/show_bug.cgi?id=292217 检查了一切,我发现Q
我的任务很重。我创建了 QProgressBar 来显示该程序仍在工作,并使用 c++ std::thread 类在另一个线程中运行繁重的任务。但是 QProgressBar 不起作用,只有带有 QP
我想要一个垂直进度条,里面有垂直(从上到下)的文本。我想知道是否以及如何使用样式表来实现这一点。我无法更改整个应用程序的样式或完全更改小部件的样式(没有“应用可用的塑料样式解决方案”)。有人可以给我提
我从一个循环(进行一些计算)发出信号,触发位于主 GUI 上的进度条更新,循环结束后进度条更新为 100%(进程结束时进度条隐藏) ,但是有延迟,进度条保持在 100%,有时鼠标变为忙碌,只有几秒钟后
我有一些不寻常的问题:为了可视化打包进度,我考虑使用 qprogressbar 在一个栏中包含两个值 - 一个显示读取的字节,另一个显示写出的字节,这也给出了关于压缩比的想象。 QT4 可以吗? 另外
我正在 QT 中开发一个 GUI,它根据用户输入执行一些繁重的计算。我在一个函数中进行所有计算,比如 start_computation() ,因为 start_computation() 函数被称为
我正在尝试使用进度条 qt creator 作为电池图像,因此我需要能够控制进度条(使用一个名为 my_value 的变量,我将在之后更改该变量)。更准确地说,我希望能够从程序中设置进度条的值,并让它
我有一个日记程序,用户可以在其中创建任务,然后为其添加休息时间。每个 Task 对象都有一个 QTime start_time、QTime end_time 和 Break 的 vector .每个
我正在尝试改变垂直对齐的 QProgressBar 的颜色 我在这里找到了如何通过 setStyleSheet 改变颜色的例子: Changing the color of a QProgressba
我在状态栏中显示进度条,但它并没有很好地对齐。如果可能的话,我希望它显示为中心对齐,或者至少在左侧有一些边距,我正在附上快照。 我遇到的第二个问题是我希望它显示文本但没有显示文本。 _progress
我使用QProgressBar来显示下载操作的进度。我想在显示的百分比中添加一些文本,例如: 10%(下载速度kB/s) 有什么想法吗? 最佳答案 使 QProgressBar 文本可见。 QProg
我有一个 PyQT GUI 应用程序 progress_bar.py,带有一个进度条和一个带有 process_files() 函数的外部模块 worker.py它对文件列表执行一些例程,并使用 pe
我想通过使其变薄来自定义QProgressBar外观。有一个 setMaximumHeight() 方法可用。但不幸的是,进度条的高度被削减(或剪辑),使其看起来很奇怪。相反,我宁愿垂直挤压或缩放它。
我正在使用 QProgressBar并且已经弄清楚如何使用此过程从逻辑层中的特定类发送进度: 在 View 层类中设置连接。 在逻辑层类中创建信号信号。 修改逻辑层类,使其成为 QObject。 调用
我想知道是否有办法自定义进度条的颜色(QtGui.QProgressBar)。假设我们希望在条形图达到 100% 时将其变为绿色。 这是一个工作示例: import sys, time from Py
实际上,我在 QProgressBar 上设置了一个图像,并希望根据 QProgressBar 的选定部分更改图像的颜色。 我尝试用 QProgressBar 颜色覆盖我的图像,但这填充了图像,但由于
我是 Qt 的初学者,我正在尝试为我的应用程序的 gui 显示进程栏。我写了下面的代码 void my_app::progress() { int val=1; while(process.s
我是一名优秀的程序员,十分优秀!