我在正在編寫的程序中連接時出現問題。我首先創建一個「主窗口」對話框,其中包含按鈕,線條編輯等(這些對我的自定義插槽都完美無缺)。其中一個按鈕(「添加類」按鈕)應該創建一個新的彈出對話框,它是mainWindow對話框的子對話框。我爲這個新對話框(addClass.h和addClass.cpp)寫了一個新的.h和.cpp文件。當我點擊按鈕時,對話框模式被設置爲ApplicationModal,並且直到這一點,代碼才起作用;當我點擊「添加類」時,新對話框顯示爲彈出窗口,包含我想要的所有標籤,線條編輯和按鈕。當我嘗試使用這個新類的連接時,問題就出現了。點擊確定按鈕後,連接不會被執行。程序編譯正確(使用qmake然後make)並且在運行時不會出錯。我還從彈出的對話框中取出了.h和.cpp文件,並用自己的main.cpp測試了它們,並且連接完美無缺。我很難將問題解決,所以任何幫助都會很棒!使用QDialog作爲彈出窗口時連接無法正常工作
這裏是代碼,可能會有所幫助一些snipets:
發起在mainWindow.cpp彈出對話框(作品和我有「addClass.h」在mainWindow.cpp)自定義插槽:
void mainWindow::addClassCombo(){
addClass aC(win);
}
addClass.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;
}
太棒了!這解決了它!非常感謝! – synthrom 2012-08-09 13:23:58