簡體   English   中英

Qt連接在構造函數不連接?

[英]Qt connect in constructor not connecting?

谷歌搜索給出這些作為前三個結果:

根據這些說法,似乎應該像其他任何事情一樣“公正地工作”。 但是這段代碼沒有:

EditorList::EditorList(..., QWidget* parent) :
    QWidget(parent)
{
    ...
    Processing* processing = Processing::getInstance();
    connect(this, SIGNAL(reorderDelete(DataSequence*,ListType,QList<int>)), processing, SLOT(reorderDelete(DataSequence*,ListType,QList<int>)));
    ...
    buttonDelete = new QPushButton(this);
    connect(buttonDelete, SIGNAL(clicked(bool)), this, SLOT(buttonDeleteClick()));
    ...
}
...
void EditorList::buttonDeleteClick()
{
    ...
    QList<int> locations;
    ...
    emit reorderDelete(mySequence, myListType, locations);    //breakpoint 1 here
}

//-----------------------------------------------------------------

void Processing::reorderDelete(DataSequence* sequence, ListType listType, QList<int> locations)
{
    if(sequence)    //breakpoint 2 here
    {
        sequence->reorderDelete(listType, locations);
    }
}

這種結構的原因不是直接調用mySequence->reorderDelete ,而是使其在Processing的線程中而不是在UI的線程中完成。 我希望我沒有刪除太多細節來顯示問題。 這是一個相當大的項目。

當我單擊刪除按鈕時,我達到了breakpoint 1 (到目前為止,很好),但沒有達到breakpoint 2 我的其他信號/插槽跨線程工作,但它們的connects不在構造函數中。 我想使該實例自動運行,以使每個實例都“只是連接”而不必記住要這樣做。 我不能那樣做嗎?

知道了 留給別人尋找。


據此 ,我的ListType枚舉阻止了系統進行連接。 它僅適用於系統已知的數據類型,因為發出SIGNAL實際上會存儲一個副本,以供SLOT(s)稍后讀取。 我知道這一點,但我認為它更像是可以容納任何東西的堆疊框架。 顯然不是。

它還可以調用qRegisterMetaType<ListType>("ListType"); connect之前的某個地方。 (我將其放在主窗口的構造函數中。)這使數據類型已知,以便連接始終可以正常工作。

我現在達到兩個斷點。

確保您在類中使用了Q_OBJECT宏

暫無
暫無

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

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