使用信号和槽在类之间发送 QStringList
Posted
技术标签:
【中文标题】使用信号和槽在类之间发送 QStringList【英文标题】:Sending QStringList between classes using signals and slots 【发布时间】:2015-08-19 11:57:27 【问题描述】:我有一个使用 QT Creator 构建的 GUI。有时会打开一个对话框窗口,我需要向该窗口发送一个 QStringList 类型的变量。我使用信号和插槽方法来做到这一点。但是,该变量在发送后为空。 以下是一些代码示例:
小部件.h
class Widget : public QWidget
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
signals:
void mySignal(QStringList);
;
widget.cpp
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
// blah blah
Widget::~Widget()
delete ui;
void Widget::on_pushButton_4_clicked()
QStringList dList;
int damount = ui->listWidget->count();
for(int i=0; i < damount; i++)
dList << ui->listWidget->item(i)->text();
qDebug() << dList;
emit mySignal(dList);
mysaver mDialog;
mDialog.setModal(true);
mDialog.exec();
mysaver.h(对话框)
class mysaver : public QDialog
Q_OBJECT
public:
explicit mysaver(QWidget *parent = 0);
~mysaver();
public slots:
void myreciever(QStringList);
mysaver.cpp
void mysaver::myreciever(QStringList aList)
qDebug << aList;
main.cpp
int main(int argc, char *argv[])
QApplication a(argc, argv);
Widget w;
Widget *duff = new Widget;
mysaver *buff = new mysaver;
QObject::connect(duff,SIGNAL(mySignal(QStringList)),buff,SLOT(myreciever(QStringList)));
w.show();
return a.exec();
非常感谢您对此提供的帮助。注意:如果我做错了整个方法并且应该做一些完全不同的事情,那么告诉我!
【问题讨论】:
QObject::connect(duff,SIGNAL(mySignal(QVariant)),buff,SLOT(myreciever(QVariant))); - 你为什么使用 QVariant 而不是 QStringList? @demonplus 抱歉打错了。 我看不出这段代码有什么明显错误,damount
是否大于零?
您的代码绝对错误,您似乎对信号和插槽缺乏了解。请重新阅读文档或一些 Qt 书籍。你用这个完全错误。这不能只用一个答案来解释。
@cmannett85 "damount" 始终是我期望的值,但感谢您的建议。
【参考方案1】:
您正在创建两个 mysaver
实例,并且只连接到第一个(不可见)实例:
// In main.cpp
mysaver *buff = new mysaver;
// In Widget::on_pushButton_4_clicked()
mysaver mDialog;
mDialog.setModal(true);
mDialog.exec();
mDialog
不是您连接的mysaver
实例。
【讨论】:
这是正确的解决方案,一切都按我的需要工作。感谢您的耐心等待。【参考方案2】:显然您使用的是 QVariant 而不是 QStringList 并且没有编译时检查。最好以这种方式进行连接:
QObject::connect(duff, &Widget::mySignal, buff, &mysaver::myreciever);
您将在编译时检查类型。
【讨论】:
然而,不幸的是,有时新语法比旧的SIGNAL
和SLOT
困难得多..
感谢您的建议。关于 QVariant 的问题是一个错字,我很抱歉。我尝试使用您的语法建立连接,但 QStringList "aList" 仍然为空。以上是关于使用信号和槽在类之间发送 QStringList的主要内容,如果未能解决你的问题,请参考以下文章