c++ 无法在Qt Connect中使用Qt::UniqueConnection

kjthegm6  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(209)

我有一个编译良好的连接语句,其连接类型为QueuedConnection。一旦我或它与UniqueConnection,它拒绝编译。我不得不将它重新转换为Qt::ConnectionType才能运行。这是正常的/预期的行为吗?
我以为连接方法定义会毫无怨言地接受int(它等价于枚举)。

connect(
    mySource, SIGNAL(mySig()),
    this, SLOT(mySlot())),
    static_cast<Qt::ConnectionType> 
    (Qt::QueuedConnection|Qt::UniqueConnection));
jogvjijk

jogvjijk1#

我尝试这个例子:

QPushButton *button = new QPushButton();
button->setText("Clicke me ");
ui->gridLayout->addWidget(button);

connect(button,&QPushButton::clicked,this,[](){
qDebug()<<"button is clicked";
}, Qt::UniqueConnection);

你在connect中写的是错误的,因为你应该遵循这样的风格:

connect(object,SIGNAL(mySig()), this,SLOT(mySlot())),Qt::QueuedConnection);

您不能同时使用两个连接

来自Qt::UniqueConnection的Qt::ConnectionType:
这是一个可以使用按位OR与上述任何一种连接类型组合的标志。当Qt::UniqueConnection被设置时,如果连接已经存在(例如,如果连接已经存在),QObject::connect()将失败。如果相同的信号已经连接到用于相同对象对的相同槽)。这个标志是在Qt 4.6中引入的。

注意到它是在Qt 4.6中引入的,它说如果连接已经存在QObject::connect()将失败

当我尝试

connect(button,&QPushButton::clicked,this,[](){
    qDebug()<<"button is clicked";
    }, Qt::UniqueConnection or Qt::QueuedConnection);

我也得到一个错误,因为我使用Qt 6版本,它可能在Qt 4.6中工作。

https://stackoverflow.com/a/20717599/9484913中,我尝试这样做:

QPushButton *button = new QPushButton();
button->setText("Clicke me ");
ui->gridLayout->addWidget(button);

QObject::connect(button,&QPushButton::clicked,this,[](){
qDebug()<<"button is clicked";
}, static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection));

它工作:

a1o7rhls

a1o7rhls2#

您必须明确选择其中一种连接类型,一个连接中不能有多个连接。
查看文档以了解其差异:Qt连接类型

相关问题