这个 Qt DBus 信号连接代码是不是正确?
Posted
技术标签:
【中文标题】这个 Qt DBus 信号连接代码是不是正确?【英文标题】:Is this Qt DBus signal connection code correct?这个 Qt DBus 信号连接代码是否正确? 【发布时间】:2012-06-26 19:01:54 【问题描述】:这是我第一次使用 DBus,所以我不完全确定我是否以正确的方式进行。我正在尝试连接 Ubuntu One DBus 服务并获取我的应用程序的登录凭据,但是我连接到 DBus 的插槽返回详细信号 here 似乎从未触发,尽管在联系。
在我开始查找与此特定服务相关的详细信息中的错误之前,有人可以告诉我此代码是否可以首先工作,或者我在这里做错了什么?
int main()
UbuntuOneDBus *u1Dbus = new UbuntuOneDBus;
u1Dbus->init();
class UbuntuOneDBus : public QObject
Q_OBJECT
QString busName;
QString path;
QString interface;
QString method;
QString signature;
void connectReturnSignals();
private slots:
void credentialsFound();
void credentialsNotFound();
void credentialsError();
public:
UbuntuOneDBus();
void init();
;
UbuntuOneDBus::UbuntuOneDBus()
busName = "com.ubuntuone.Credentials";
path = "/credentials";
interface = "com.ubuntuone.CredentialsManagement";
method = "register";
signature = "ass";
connectReturnSignals();
void UbuntuOneDBus::init()
QDBusMessage message = QDBusMessage::createMethodCall( busName, path, interface, method );
QDBusConnection::sessionBus().send( message );
void UbuntuOneDBus::connectReturnSignals()
QDBusConnection::sessionBus().connect( busName, path, interface, "CredentialsFound", this, SLOT( credentialsFound() ) );
QDBusConnection::sessionBus().connect( busName, path, interface, "CredentialsNotFound", this, SLOT( credentialsNotFound() ) );
QDBusConnection::sessionBus().connect( busName, path, interface, "CredentialsError", this, SLOT( credentialsError() ) );
void UbuntuOneDBus::credentialsFound()
qDebug() << "Credentials found";
void UbuntuOneDBus::credentialsNotFound()
std::cout << "Credentials not found" << std::endl;
void UbuntuOneDBus::credentialsError()
std::cout << "Credentials error" << std::endl;
【问题讨论】:
我很惊讶你在运行代码时没有收到关于没有初始化 QCoreApplication 的警告。 这实际上是实际代码的压缩版本,它确实有一个 QApplication。 检查我的答案,如果有帮助请写下 【参考方案1】:我想你忘记跑步了
QDBusConnection QDBusConnection::connectToBus ( BusType type,
const QString & name )
然后检查
bool QDBusConnection::isConnected () const
调用前
void UbuntuOneDBus::connectReturnSignals()
或运行带有一些标志的程序,但这应该更容易。
我不想要你的目标,但也许你也应该尝试
bool QDBusConnection::registerObject ( const QString & path, QObject * object,
RegisterOptions options = ExportAdaptors )
这里有一些文档: connectToBus
isConnected
registerObject
【讨论】:
以上是关于这个 Qt DBus 信号连接代码是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章
Qt DBus 连接不使用 SLOT 参数中的 typedef