[英]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::ConnectionType的Qt::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.