gpt4 book ai didi

c++ - QT从信号返回值?

转载 作者:行者123 更新时间:2023-11-28 06:51:56 25 4
gpt4 key购买 nike

我在单独的线程中运行我所有的 SQLite 数据库操作,以确保 GUI 不会卡住。

我通过为方法连接信号和槽来做到这一点。

但是现在我需要找到一种方法让 SQLite 线程将选定的值返回到我的主线程。

我的头文件:

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

// ....
// ....

signals:
QString getUserNickS(QString channel);
}

class dbThread : public QObject
{
Q_OBJECT

public:
dbThread();

public slots:
bool openDB(QString agentID);
QString getUserNick(QString channel);

private:
QSqlDatabase db;
};

然后我在一个单独的线程中打开 MainWindow 内的数据库连接,如下所示:

// Start database thread
QThread * thread = new QThread();
dbtrad = new dbThread();
dbtrad - > moveToThread(thread);

//dbtrad->openDB(agentID);
connect(this, SIGNAL(requestOpenDB(QString)), dbtrad, SLOT(openDB(QString)));
connect(this, SIGNAL(getUserNickS(QString)), dbtrad, SLOT(getUserNick(QString)));

thread - > start();

emit requestOpenDB(userID);

最后在我的应用程序中的某个时刻,我想查询 SQLite 数据库以获取一些信息并接收返回值:(仍在 MainWindow 内)

QString retVal = getUserNickS(channelId);
qDebug() << "RET VALUE -----> " + retVal;

getUserNick 方法如下所示:

// Returns visitor nickname for a channelId
QString dbThread::getUserNick(QString channel) {
bool ret = false;

if (db.isOpen()) {
QSqlQuery query(db);

ret = query.exec(QString("select * from visitorInfo WHERE channelID = '%1' order by date(time) ASC LIMIT 1;").arg(channel));

if (ret) {
bool gotResults = false;
while (query.next()) {
gotResults = true;
qDebug() << query.value(14).toString();
return query.value(14).toString();
}
if (!gotResults) {
qDebug() << "Name " + channel.replace("V", "");
return "Name " + channel.replace("V", "");
}

} else {
qDebug() << "Name " + channel.replace("V", "");
return "Name " + channel.replace("V", "");
}
}
}

关于如何获取返回值的任何想法?

最佳答案

当发射器和接收器在不同的线程中时,您应该有一个类型为 Qt::BlockingQueuedConnection 的连接。

所以它应该是这样的:

connect(this, SIGNAL(getUserNickS(QString)), dbtrad, SLOT(getUserNick(QString)),Qt::BlockingQueuedConnection);

当您发出信号时,它会导致当前线程阻塞,直到插槽返回为止。

关于c++ - QT从信号返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com