2012-02-22 1 views

ответ

1

Это кажется очень неэффективным, но вы можете создать новый сигнал с аргументом , который вы подключаете к своей кнопке. Текст, содержащийся в тексте, будет определен в вашем звонке.

например.

connect(yes, SIGNAL(clicked()), this, SLOT(emitHelloWorldText()); 
connect(this, SIGNAL(emitText(QString)), receiver, SLOT(dostuffWithText(QString))); 

, то ваш метод emitHelloWorldText может быть что-то вроде

void emitHelloWorldText() { 
    emit emitText("Hello world"); 
} 

Тогда это может быть подобрано классом приемника

void doStuffWithText(const QString &text) { 
+0

Это ужасно. Следующим шагом является то, что 'emitHelloWorld' фактически получает некоторый текст для испускания из элемента GUI. – pmr

0

К сожалению, слот и сигнал должны иметь соответствующие аргументы. Если вам действительно нужно придерживаться этого интерфейса, вы можете создать промежуточный слот для распространения полученного сигнала, но нет никакого реального пути.

2

Часто упускается из вида способа обратного сигнала/слот отношение является . Вы можете вызвать его в приемном слоте, чтобы получить дескриптор на QPushButton (используя qobject_cast) и получить текст оттуда. В качестве альтернативы вы можете использовать QSignalMapper для увеличения сигналов.

+0

Использование отправителя() никогда не является чистым решением, поскольку оно разрывает развязку, предполагая, что в слот есть определенный отправитель. –

+0

@FrankOsterfeld Таким образом, пересылка слота через посредника. Просто в другом месте. Механизм сигнала и слот Qt немного ослаблен, как только вы покидаете предопределенные пути. – pmr

Смежные вопросы