簡體   English   中英

不能在 Qt 連接中使用 Qt::UniqueConnection

[英]Can't use Qt::UniqueConnection in Qt connect

我有一個編譯良好的連接語句,連接類型為 QueuedConnection。 一旦我用 UniqueConnection 或它,它就拒絕編譯。 我必須將它重新轉換回Qt::ConnectionType才能運行。 這是正常/預期的行為嗎?

我認為連接方法定義會毫無怨言地接受一個 int(相當於 enum)。

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

我試試這個例子:

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::ConnectionTypeQt::UniqueConnection

這是一個可以使用按位 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));

它有效:

在此處輸入圖像描述

您必須明確選擇一種連接類型,一個連接中不能有多個。

檢查文檔以了解它們的區別: Qt 連接類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM