我的项目中的一个类有问题,单击后会出现带有 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;
}
我什至没有一个警告或错误。我在标准输出上没有任何内容,看起来按钮连接到了错误的对象(?)
如何实例化
ClientsSelector
?难道它不是偶然的单例或全局变量吗?尝试将 connect
调用移至单独的 init 函数,该函数在 ClientsSelector
构造函数之后调用。它在类似 WTF 情况下帮助了我。这与每个 QObject 继承者都有一个静态元数据成员这一事实有关,并且在构造函数完成之前您无法确定它何时完全初始化。如果没有该元数据,connect
将无法工作。
参见此处的示例:http://www.qtcentre.org/threads/9479-connect-in-constructor
如果仍然丢失,请查看此清单。 Qt 信号是如此易于使用,每个人有时都会忘记它也有一些要求。
似乎您忘记了测试打印输出上的结束语“。
尝试使用
qDebug() << "test";
而不是QTextstream
您可以执行以下操作以确保已建立连接并调用插槽。
这可能有助于查找原因。