2013-11-28 116 views
0

這個想法是將QWidget與一個變量連接起來,這樣當一個小部件上的文本發生變化時,它也會在變量中發生變化。將QWidget映射到變量

而且這樣做只有一個這樣的

WidgetMapper::connect(ui->lineEdit, SIGNAL(textChanged(QString)), someClass.var); 

線,將例如QLineEdit具有可變連接。

1)這將在lineEdit

2)當lineEdit觸發一個textChanged(QString)信號顯示var - WidgetMapper將其轉換的QString校正映射類型與字符串流,並將其寫入var

但我真的不知道模板,以及不知道是否有可能。 我不認爲每種類型都可以使用一個WidgetMapper,所以我也嘗試爲每種類型創建不同的實例(WidgetMapper<int> mapper;),然後爲每個QLiteEdit編寫setter和onTextChangedSlots,但仍然無法弄清楚如何製作它也可以工作(轉換器部分仍然無法找出正確的類型)。

WidgetMapper使用QSignalMapper到信號映射到QWidget的,它工作得很好,我有麻煩的一部分 - 被轉換的QString到模板變量中。

那麼有可能嗎?如果是的話,我怎麼能這樣做?或者也許已經有解決這個問題的辦法了? (以某種方式使用QDataWidgetMapper與包含變量的類可能?)

+0

爲什麼不使用'QLineEdit :: value()'並在需要時轉換返回的值? –

+0

@RomhaKorev,因爲它們有很多,並且在編輯之後變更應該在變量中更改值。所以我想避免寫每個QLineEdit onTextChanged插槽將其文本()轉換爲變量 – Stals

回答

2

首先,連接變量除了調用某個函數之外什麼也不做,如果它是possigle。

第二次嘗試使用QSignalMapper,通過這種方式,您可以爲所有小部件使用單個插槽,因爲您可以將其指針保持在數組中,其索引是由SignalMapper發出的信號(int)。這樣您的插槽可以使用MyWidgetArray[i]->text()

+0

,但我怎麼記得哪個Widget是哪個變量? – Stals

+0

看看QSignalMapper。您可以爲不同的小部件發出int信號。只需創建兩個包含小部件和變量的數組,然後使用:'MyVarArray [i] = MyWidgetArray.at [i] - > text();''其中我只是QSignalMapper發出的int(這是我首選的方式在一個插槽中管理大量相同類型的wigets) –

相關問題