Qt - 连接但不起作用

时间:2012-09-13 10:32:04

标签: qt connect qwidget qpushbutton

我的项目中有一个类有问题,点击后出现了带有QTableWidget和QPushButton的新窗口,点击按钮后我应该在stdout上有“test”,但没有显示,这里是这段代码的一部分:

部首:

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;

}

我甚至没有一个警告也没有错误。我在stdout上什么也没有,看起来按钮连接到错误的对象(?)

3 个答案:

答案 0 :(得分:0)

好像你忘记了关闭&#34;在测试打印输出上。

尝试使用

qDebug() << "test";

而不是QTextstream

答案 1 :(得分:0)

如何实例化ClientsSelector?它不是偶然的单身人士或全球变量吗?尝试将connect调用移动到在ClientsSelector构造函数之后调用的单独init函数。它帮助我在类似的WTF情况下。它与每个QObject继承者都有一个静态元数据成员这一事实有关,而且在构造函数完成之前你无法确定它何时被完全初始化。如果没有这些元数据,connect将无效。

例如,请参见:http://www.qtcentre.org/threads/9479-connect-in-constructor

如果仍然丢失,请浏览this checklist。 Qt信号非常容易使用,每个人有时会忘记它也有一些要求。

答案 2 :(得分:0)

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

  1. connect函数返回连接状态。检查连接是否正确。
  2. 设置一个断点,看看按下按钮时是否调用了loadData()。
  3. 这可能有助于找到原因。