【问题标题】:Qt connection not workingQt 连接不工作
【发布时间】:2014-11-13 10:24:18
【问题描述】:

该程序应该基于QLineEdits 获取一个矩阵,然后在单击转置按钮后,它应该打开一个新框架,转置矩阵为QLabel`s。

问题是,点击转置按钮没有做任何事情,所以我认为它与连接有关

这是我的那个 .cpp 的头文件

#ifndef DIMENSIONS_H
#define DIMENSIONS_H

#include <QDialog>
#include <QLineEdit>

namespace Ui {
class Dimensions;
}

class Dimensions : public QDialog
{
    Q_OBJECT

public:
    explicit Dimensions(QWidget *parent = 0);
    ~Dimensions();

private slots:
    void on_buttonBox_accepted();
    void accepts();

private:
    Ui::Dimensions *ui;
};


#endif // DIMENSIONS_H

这是我的代码:


void Dimensions::on_buttonBox_accepted()
{

rows=ui->spinBox->value();
columns=ui->spinBox_2->value();
QFrame *result = new QFrame;
QGridLayout* layout = new QGridLayout;

for(int i=0;i<rows;i++){
    for(int j=0;j<columns;j++){
        fields[i][j] = new QLineEdit();
        fields[i][j]->setFixedWidth(30);
        layout->addWidget(fields[i][j],i,j);
    }
}

transpose = new QPushButton("Transpose",result);
layout->addWidget(transpose, rows-1,columns,1,1);
result->setLayout(layout);
result->show();
connect(transpose,SIGNAL(clicked()),result,SLOT(accepts()));
}



void Dimensions::accepts()
{
QLabel *results[10][10];
QFrame *answer = new QFrame;
QGridLayout *RLayout = new QGridLayout;
for(int i=0;i<columns;i++){
    for(int j=0;j<rows;j++){
      results[i][j] = new QLabel(fields[j][i]->text());
      results[i][j]->setFixedWidth(30);
      RLayout->addWidget(results[i][j],i,j);
    }
}
answer->setLayout(RLayout);
answer->show();
}

【问题讨论】:

  • 您能发布您的控制台输出或调试输出吗? Connect 将打印一条无法连接的消息,以及类和信号/插槽信息
  • 对不起,我对 QT 有点陌生,你是怎么做到的
  • 如果不知道您的系统设置,这很难说。也许您只需要查看 IDE 的控制台输出。当然,您可以查看this question,了解如何在 Gui 应用程序中显示控制台。
  • 1) Moc 编译器是否从您的Dimensions.h 生成moc_Dimensions.cpp?如果是这样,它也应该添加到项目中。 2) 检查连接的布尔结果。
  • 我认为这是我发现没有 moc_Dimensions.cpp 的问题

标签: c++ qt connect


【解决方案1】:

我认为问题在于您将 receiver 定义为 result 对象,但是您的插槽位于 Dimensions 类中。所以你必须按如下方式设置连接:

connect(transpose, SIGNAL(clicked()), this, SLOT(accepts()));
//                                 ---^^^

【讨论】:

  • 我试过了,但按钮仍然没有任何作用
  • 在你的头文件中显示正在发生的事情。
  • @Val,运行 qmake 并再次重建您的项目。
猜你喜欢
  • 1970-01-01
  • 2014-01-13
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2016-04-14
相关资源
最近更新 更多