我在当前正在编写的程序中遇到连接问题。我首先创建了一个“主窗口”对话框,其中包含按钮、行编辑等(这些都与我的自定义插槽完美配合)。其中一个按钮(“添加类”按钮)应该创建一个新的弹出对话框,它是主窗口对话框的子对话框。我为这个新对话框(addClass.h 和 addClass.cpp)编写了一个新的 .h 和 .cpp。当我单击按钮时,对话框模式设置为 ApplicationModal 并且到目前为止,代码有效;当我单击“添加类”时,新对话框显示为一个弹出窗口,其中包含我想要的所有标签、行编辑和按钮。当我尝试使用这个新类使用连接时,问题就出现了。单击确定按钮后,不执行连接。程序正确编译(使用 qmake 然后 make)并且在运行时没有错误。我还从弹出对话框中获取了 .h 和 .cpp 文件,并用他们自己的 main.cpp 对其进行了测试,并且连接工作得很好。我对问题可能是什么感到困惑,所以任何帮助都会很棒!
以下是一些可能有用的代码片段:
在 mainWindow.cpp 中启动弹出对话框的自定义插槽(有效,我在 mainWindow.cpp 中包含“addClass.h”):
void mainWindow::addClassCombo(){
addClass aC(win);
}
添加类.h:
#ifndef ADDCLASS_H
#define ADDCLASS_H
#include <QDialog>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QString>
class addClass : public QDialog{
Q_OBJECT
public:
addClass(QWidget *parent = 0);
private slots:
void addToTxt();
private:
QDialog *addMathClass;
QVBoxLayout *mainLayout;
QHBoxLayout *layoutOkCanc;
QLabel *nameL; //label for name of math class to be added
QLineEdit *name; //line edit for name
QPushButton *ok; //ok button
QPushButton *canc; //cancel button
};
#endif
addClass.cpp(与它自己的 main.cpp 一起使用,但不是与我的 mainWindow.cpp 一起使用):
#include <QtGui>
#include <QTextStream>
#include "addClass.h"
#include <iostream>
addClass::addClass(QWidget *parent):QDialog(parent){
addMathClass = new QDialog(parent);
mainLayout = new QVBoxLayout(addMathClass);
layoutOkCanc = new QHBoxLayout();
nameL = new QLabel("Math Class Name:");
name = new QLineEdit;
nameL->setBuddy(name);
ok = new QPushButton("Ok");
canc = new QPushButton("Cancel");
QObject::connect(canc, SIGNAL(clicked()), addMathClass, SLOT(close()) ); //<-works
QObject::connect(ok, SIGNAL(clicked()), this, SLOT(addToTxt()) ); //<-doesn't work
QObject::connect(ok, SIGNAL(clicked()), addMathClass, SLOT(close()) ); //<-works
layoutOkCanc->addStretch();
layoutOkCanc->addWidget(ok);
layoutOkCanc->addWidget(canc);
mainLayout->addWidget(nameL);
mainLayout->addWidget(name);
mainLayout->addLayout(layoutOkCanc);
addMathClass->setWindowModality(Qt::ApplicationModal);
addMathClass->setWindowTitle("Add Class");
addMathClass->show();
}
void addClass::addToTxt(){
std::cout<<"testing"<<std::endl;
}