Я хотел знать если его возможное испускать некоторый определенный сигнал посредством кодирования.. Например, я хочу испустить нажатое событие другой кнопки без пользователя, на самом деле нажимающего ту кнопку.. может сделать я делаю это?
Вы можете вызвать функцию click этой другой кнопки. Она выдаст сигнал нажатия.
Вместо того, чтобы излучать сигнал самостоятельно и подключать его к слоту, почему вы не можете вызвать слот напрямую ? Слоты похожи на другие функции C ++ в том смысле, что вы можете вызывать их напрямую. Я не вижу причин, по которым вы испускаете предопределенный сигнал (например, clicked ()
). Просто позвоните в свой слот напрямую .
Сигналы внутренне реализованы как функции-члены, защищенные C ++, поэтому я бы не советовал делать это. (Они общедоступны в Qt 5, хотя это все еще не рекомендуется в качестве общего решения.)
Qt, через moc, реализует ключевое слово emit, которое позволяет вам излучать сигналы через кодирование.
Если класс, который вы используете, не предоставляет метод для излучения какого-то сигнала, вы можете сделать его подкласс и реализовать функцию, которая сделает это сама. Но я должен сказать, что я никогда не делал этого для "обычных" сигналов. Только когда я определял свои собственные сигналы в каком-нибудь расширении класса.
для генерации сигнала просто напишите
emit signalName (список параметров);
#include <QObject>
class myClass : public QObject
{
Q_OBJECT
public:
myClass (QObject *parent = 0) : QObject(parent) { }
void foo();
signals:
void mySignal(int param);
};
void myClass::foo() { emit mySignal(5); }
подробнее см. http://doc.qt.io/qt-4.8/signalsandslots.html
вы также можно подключить сигнал к другому сигналу, чтобы вы могли подключить свой сигнал к сигналу нажатия кнопок, и когда ваш сигнал испускается, сигнал щелчка также будет излучаться см. http://doc.qt.io/qt-4.8/qobject.html#connect