【发布时间】:2023-03-30 23:02:01
【问题描述】:
我无法在假定的SLOT 中接收我的自定义信号。这是我的代码:
mainwindow.h:
class HistoryItem {
public:
QString channel;
};
class dbThread : public QObject
{
Q_OBJECT
public:
dbThread();
signals:
void historyLoaded(QList<HistoryItem*> innerResult);
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void historyLoaded(const QList<HistoryItem*> innerResult);
mainwindow.cpp:
connect(dbtrad, SIGNAL(historyLoaded(QList<HistoryItem*>*)), this, SLOT(historyLoaded(QList<HistoryItem*>*)));
void MainWindow::historyLoaded(QList<HistoryItem*> innerResult) {
qDebug() << "historyLoaded()...";
}
这就是我发出信号的方式:
QList<HistoryItem*> innerResult;
while (queryInner.next()) {
QString channelIDInner = queryInner.value(0).toString();
HistoryItem* item = new HistoryItem();
item->channel = channelIDInner;
innerResult.append(item);
}
qDebug() << "DONE LOADING.....";
emit historyLoaded(innerResult);
但是,qDebug() << "historyLoaded()..."; 永远不会被执行。
任何想法可能是什么问题?
【问题讨论】:
-
你确定信号/槽机制可以处理模板吗? qt-project.org/doc/qt-4.8/templates.html
-
如果您使用的是 Qt5 或更高版本,您可以使用
connect(dbtrad, &dbThread::historyLoaded, this, &MainWindow::historyLoaded);