Qt - 已连接但不起作用

问题描述 投票:0回答:3

我的项目中的一个类有问题,单击后会出现带有 QTableWidget 和 QPushButton 的新窗口,单击按钮后我应该在标准输出上进行“测试”,但没有显示任何内容,以下是此代码的部分内容:

标题:

class ClientsSelector : public QWidget {
Q_OBJECT

public:
ClientsSelector(InvoiceTab* parent);
QWidget *window;

private:
QPushButton *accept;

public slots:
void loadData();

构造者:

window = new QWidget();
layout = new QGridLayout();
layout->addWidget(table, 0, 0);

/*code*/

accept = new QPushButton(QString::fromUtf8("Load data"));
connect(accept, SIGNAL(clicked()), this, SLOT(loadData()));
layout->addWidget(accept, 0, 1);

/*code*/

window->setLayout(layout);

window->show();

方法:

void ClientsSelector::loadData() {

QTextStream std(stdout);
std << "test" << endl;

}

我什至没有一个警告或错误。我在标准输出上没有任何内容,看起来按钮连接到了错误的对象(?)

qt qwidget qpushbutton
3个回答
1
投票

如何实例化

ClientsSelector
?难道它不是偶然的单例或全局变量吗?尝试将
connect
调用移至单独的 init 函数,该函数在
ClientsSelector
构造函数之后调用。它在类似 WTF 情况下帮助了我。这与每个 QObject 继承者都有一个静态元数据成员这一事实有关,并且在构造函数完成之前您无法确定它何时完全初始化。如果没有该元数据,
connect
将无法工作。

参见此处的示例:http://www.qtcentre.org/threads/9479-connect-in-constructor

如果仍然丢失,请查看此清单。 Qt 信号是如此易于使用,每个人有时都会忘记它也有一些要求。


0
投票

似乎您忘记了测试打印输出上的结束语“。

尝试使用

qDebug() << "test";

而不是QTextstream


0
投票

您可以执行以下操作以确保已建立连接并调用插槽。

  1. connect 函数返回连接状态。检查连接是否正确。
  2. 放置一个断点,看看按下按钮时是否调用 loadData()。

这可能有助于查找原因。

© www.soinside.com 2019 - 2024. All rights reserved.