标签: qt-signals

我的信号/插槽连接不起作用

我反复看到有人没有调用插槽的问题.我想收集一些最常见的原因.所以也许我可以帮助别人并避免许多多余的问题.

信号/插槽连接不起作用的原因是什么?如何避免这些问题?

qt signals-slots qt-signals qt-connection qt-slot

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

Qt中Q_PROPERTY有什么意义?

我无法理解Q_PROPERTY的用法.Q_PROPERTY如何帮助使程序防御?它是干什么用的?我见过论坛,但真的无法进行论坛.我已经理解了这个例子,但不是它的用法.

这是一个例子,我从中获得了什么.我知道阅读会给予阅读权限.

write属性将赋予仅写入权限.但它有什么需要呢?有人可以举例说明吗?

 class MyClass : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
     Q_ENUMS(Priority)

 public:
     MyClass(QObject *parent = 0);
     ~MyClass();

     enum Priority { High, Low, VeryHigh, VeryLow };

     void setPriority(Priority priority)
     {
         m_priority = priority;
         emit priorityChanged(priority);
     }
     Priority priority() const
     { return m_priority; }

 signals:
     void priorityChanged(Priority);

 private:
     Priority m_priority;
 };
Run Code Online (Sandbox Code Playgroud)

c++ qt qobject qt-signals qproperty

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

删除信号发送的对象,信号中对象的所有权,Qt

在这里,我的信号声明:

signals:
    void mySignal(MyClass *);
Run Code Online (Sandbox Code Playgroud)

以及我如何使用它:

MyClass *myObject=new myClass();
emit mySignal(myObject);
Run Code Online (Sandbox Code Playgroud)

这是我的问题:谁负责删除myObject:

  1. 发件人代码,如果在使用myObject之前删除了什么?悬挂指针

  2. 插槽连接到信号,如果没有插槽或连接到信号的多个插槽怎么办?内存泄漏或悬空指针

Qt如何在其内置信号中管理这种情况?它是否使用内部引用计数?

你最好的做法是什么?

c++ qt signals-slots qt-signals

17
推荐指数
2
解决办法
4059
查看次数

如何在不派生QObject的情况下使用SIGNAL和SLOT?

或其他方式来表达我的问题(虽然它没有解决我的问题):'QObject :: QObject'无法访问类'QObject'中声明的私有成员

我的课程中需要SIGNALs和SLOTS功能,但我认为不可能从中衍生出来QObject

class MyClass
{
signals:
   importantSignal();
public slots:
   importantSlot();
};
Run Code Online (Sandbox Code Playgroud)

问题似乎是我需要派生QObject来使用信号和插槽......但我需要默认的构造函数MyClass.但由于以下特性,我无法构造它们QObject: No Copy Constructor或Assignment Operator.

我试了很多......

所以我的上课看起来像这样:

#include <QObject>
class MyClass: public QObject
{
    Q_OBJECT
public:
    explicit MyClass(QObject *parent = 0); //autogenerated by qtcreator for QObject derived class
    MyClass(const MyClass * other);

signals:
    importantSignal();
public slots:
    importantSlot();
};
Run Code Online (Sandbox Code Playgroud)

我需要默认的构造函数MyClass.

那么有没有可能避免"'QObject :: QObject'无法访问类'QObject'中声明的私有成员"错误?

或者作为替代方案是否有可能没有使用信号和插槽QObject

我很高兴有任何建议.

c++ qt qobject slot qt-signals

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

qt信号未定义的参考错误

我有一个类服务器,我已经创建了一个加入的信号(QString名称).我在一个名为join(QString name)的函数中调用它,但是我收到了错误

Server.o:在函数Server::join(QString)': Server.cpp:(.text+0x48): undefined reference to Server :: joined(QString)'collect2:ld返回1退出状态

这是我的头文件的样子:

#ifndef SERVER_H
#define SERVER_H

#include <QString>
#include <mqueue.h>
#include <QVector>
#include <QStringList>
#include "../src/messages.h"

class Server
{
public:
    Server();
    void start();
private:
    void join(QString name);
    char buf[MSG_SIZE], msgSend[MSG_SIZE];
    QVector<mqd_t> mq_external;
    QVector<QString> users;
    mqd_t mq_central;
    struct mq_attr attr;


signals:
    void joined(QString name);

};

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

这是我的cpp文件:

#include "Server.h"

using namespace std;

Server::Server()
{
}

void Server::start(){

    attr.mq_maxmsg = 100;
    attr.mq_msgsize = MSG_SIZE;
    attr.mq_flags = 0;

    mq_unlink(CENTRALBOX);
    mq_central = …
Run Code Online (Sandbox Code Playgroud)

c++ qt signals-slots qt-signals

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

Qt/C++:检查QListWidgetItem时的信号?

在我的表格中,我有一个QListWidget包含可检查的内容QListWidgetItems.我正在寻找一种方法来捕获QListWidgetItem被检查/未检查的事件.我没有看到任何这样的信号,但也许我错了.用什么我目前做的是QListWidget::itemClicked()信号和检查checkStateQListWidgetItem,但是这不是我想要的,因为这种事件发生的项目被点击任何时候,不要只是去对号翻转.谁能提供一些帮助?谢谢!

c++ qt qlistwidget qt-signals

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

QObject :: connect vs connect方法之间的区别

我是Qt的新手.大多数时候,Qt开发人员需要使用信号和插槽进行对象通信.到目前为止,我已经看到了两种连接信号和插槽的方法.

1)QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label,  SLOT(setNum(int)));

2)connect(scrollBar, SIGNAL(valueChanged(int)),label,  SLOT(setNum(int)));
Run Code Online (Sandbox Code Playgroud)

两者之间的确切区别是什么?为什么我们必须在第一种方法中为QObject加前缀?

c++ qt qobject qt-signals qtcore

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

等待信号

我正在开发一个将文件内容上传到服务器的应用程序.

要将文件上传到服务器,我使用的是"QNetworkAccessManager"类.由于它以异步方式工作,我通过使用QEventLoop将其更改为以同步方式工作.

Class FileTransfer
{
Public : 
     QNetworkAccessManager mNetworkManager;
     Void Upload(QNetworkRequest request, QIODevice *data)
     {
           responce = mNetworkManager.put(request, data);
           EventLoop.exec();
           ReadResponce(responce);
      }

      Void Stop()
      {
            responce ->close();
      }
}
Run Code Online (Sandbox Code Playgroud)

在我的示例应用程序中,我有2个窗口.第一个选择文件,第二个显示进度.

当用户在第一个窗口中单击上传按钮时,将显示第二个窗口,然后我创建FileTransfer对象并开始上传.

当用户关闭表单时上传文件,然后在窗口的析构函数中,我调用" FileTransfer " 的停止,然后删除' FileTransfer '对象.

但是这里的Upload()函数还没有完成,所以它会崩溃.

请帮助我:如何等待'stop() '函数,直到Upload()函数完成

qt signals signals-slots qt-signals

11
推荐指数
1
解决办法
2万
查看次数

QSignalMapper如何工作?

我在这里发布后:将信号和插槽关联到qcheckbox动态创建我需要关联:

clicked()单击某个qCheckBox功能时的信号cliqueCheckBox(QTableWidget *monTab, int ligne, QCheckBox *pCheckBox)

要做到这一点,我必须使用QSignalMapper,经过两个小时试图了解它是如何工作的,我不能有一个好的结果,这是我做的代码,这显然是错误的:

 QSignalMapper *m_sigmapper = new QSignalMapper(this);
 QObject::connect(pCheckBox, SIGNAL(mapped(QTableWidget*,int, QCheckBox*)), pCheckBox, SIGNAL(clicked()));
 QObject::connect(this, SIGNAL(clicked()), this, SLOT(cliqueCheckBox(QTableWidget *monTab, int ligne, QCheckBox *pCheckBox)));

 m_sigmapper->setMapping(pCheckBox, (monTab,ligne, pCheckBox));
 QObject::connect(m_sigmapper, SIGNAL(clicked()),this, SLOT(cliqueCheckBox(QTableWidget *monTab, int ligne, QCheckBox *pCheckBox)));
Run Code Online (Sandbox Code Playgroud)

你能解释一下,怎么样QSignalMapper?我真的不明白要联系到什么:(

c++ qt slot qt-signals qsignalmapper

11
推荐指数
2
解决办法
1万
查看次数

Qt:使用QObject :: connect指定多个连接类型

我想知道是否可以指定多种连接类型.例如,我希望我的连接类型是排队连接和唯一连接.是否可以在一个声明中指定?

QObject::connect(ptrSender,SIGNAL(..),ptrReceiver,SLOT(...),Queued-and-unique)
Run Code Online (Sandbox Code Playgroud)

更新:

根据海报的建议:

我试过用 Qt::QueuedConnection | Qt::UniqueConnection但是得到了

 `Error 1   error C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const QObject *,const char *,Qt::ConnectionType)' : cannot convert parameter 5 from 'int' to 'Qt::ConnectionType'
Run Code Online (Sandbox Code Playgroud)

c++ qt qobject qt-signals qtcore

10
推荐指数
2
解决办法
4277
查看次数