相关疑难解决方法(0)

Qt问题:信号和插槽如何工作?

信号和插槽如何在高级抽象中工作?

如何在高级抽象中实现信号和槽?

c++ qt

15
推荐指数
3
解决办法
2万
查看次数

Qt如何实现信号和插槽?

有人能向我解释Qt信号和插槽机制实现的基本思想吗?我想知道所有这些Q_OBJECT宏在"纯C++"中做了什么.这个问题与信号和插槽使用无关.

补充:我知道Qt使用moc编译器在普通的C++中转换Qt-C++.但是moc做了什么?我试着读"moc_filename.cpp"文件,但我不知道这是什么意思

void *Widget::qt_metacast(const char *_clname)
{
if (!_clname) return 0;
if (!strcmp(_clname, qt_meta_stringdata_Widget))
    return static_cast<void*>(const_cast< Widget*>(this));
return QDialog::qt_metacast(_clname);
}
Run Code Online (Sandbox Code Playgroud)

qt signals-slots

15
推荐指数
1
解决办法
9237
查看次数

是否可以看到Q_SIGNALS,Q_SLOT,SLOT(),SIGNAL()宏的定义?(QT)

是否有可能在Qt框架中看到Q_SIGNALS,Q_SLOT,SLOT(),SIGNAL()宏的定义?

PS Google在这个问题上没有给我任何帮助.

c++ qt signals-slots

6
推荐指数
1
解决办法
7725
查看次数

为什么Qt在signal/slot中使用无效的类/类型名称引发编译错误?

Windows 7 SP1
MSVS 2010
Qt库4.8.4 for Windows(VS 2010)
Visual Studio加载项1.1.11 for Qt4

起初,我无法弄清楚为什么这个插槽没有触发:

connect (lineEdit, SIGNAL(textChanged(const QString &)),
         this, SLOT(enableFindButton(const Qstring &)));
Run Code Online (Sandbox Code Playgroud)

差异清楚地表明:Qstring应该是QString.

我的问题:为什么要编译?事实上,它将编译为:

connect (lineEdit, SIGNAL(textChanged(const nonsense &)),
         this, SLOT(enableFindButton(const more_nonsense &)));
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?为什么这不会引起错误?

qt visual-studio-2010

1
推荐指数
1
解决办法
290
查看次数

为什么添加函数参数会导致SLOT()无法识别?

我有一个课程如下:

handler.h中:

#ifndef HANDLER_H
#define HANDLER_H

#include <QObject>

class handler : public QObject
{
    Q_OBJECT

public:
    explicit handler(QObject *parent = nullptr);
    ~handler();

public slots:
    void returnHandler(int input);
};

#endif // HANDLER_H
Run Code Online (Sandbox Code Playgroud)

handler.cpp:

#include "handler.h"
#include "otherclass.h"

handler::handler(QObject *parent) : QObject(parent)
{

}

handler::~handler()
{

}

void handler::returnHandler(int input)
{
    otherclass *otherclassPointer = otherclass::getInstance();
    otherclassPointer->returnFunction(input);
}
Run Code Online (Sandbox Code Playgroud)

如图所示,这是一个非常简单的类,旨在接收输入并将输入传递给外部类('otherclass')中的函数.在我的主应用程序('main.cpp')中,我创建了一个QThread,并returnHandlerQThread启动时调用插槽,如下所示:

main.cpp中:

QThread* newThread = new QThread();
handler* handlerPointer = new handler();
handlerPointer->moveToThread(newThread);
connect(newThread, SIGNAL(started()), handlerPointer, SLOT(returnHandler(someInput)));
newThread->start();
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是: …

c++ qt signals-slots

1
推荐指数
1
解决办法
96
查看次数

标签 统计

qt ×5

c++ ×3

signals-slots ×3

visual-studio-2010 ×1