2013-12-16 61 views
2

我需要一些信號和插槽連接的幫助。這是我的。按鈕連接Qt失敗

.h文件區域是從QMdiArea繼承的類的示例。 AddSubWindow是這個類的槽,它可以和其他信號一起工作。編譯所述

"QObject::connect: No such slot MyMdiArea::AddSubWindow(true) in workspace.cpp:37" 
#include "workspace.h" 

WorkSpace::WorkSpace(QWidget *parent) 
    : QWidget(parent) 
{ 

    HLayout=new QHBoxLayout; 
    VLayout=new QVBoxLayout; 

    TabButton = new QPushButton("Tabbed View"); 
    SimpleButton = new QPushButton("Simple View"); 

    AddButton = new QPushButton("Add Window"); 

    HLayout->addWidget(AddButton); 
    HLayout->addWidget(TabButton); 
    HLayout->addWidget(SimpleButton); 

    str="Title"; 
    area = new MyMdiArea(0,str); 
    area->setViewMode(QMdiArea::TabbedView); 
    area->setTabsClosable(true); 
    area->setTabsMovable(true); 

    VLayout->addLayout(HLayout); 
    VLayout->addWidget(area); 

    connect(AddButton,SIGNAL(clicked()),area,SLOT(AddSubWindow(true))); 

    this->setLayout(VLayout); 
    //this->show(); 

} 





WorkSpace::~WorkSpace() 
{ 

} 

void MyMdiArea::AddSubWindow(bool i) 
{ 
    //QString str="заголовок"; 
    MyWindow *widget = new MyWindow(0,str1); 

    addSubWindow(widget); 
    widget->setWindowTitle(str1); 
    widget->show(); 


} 

小時。文件

#include <QtWidgets/QMainWindow> 
#include "ui_workspace.h" 
#include "MyMdiArea.h" 
#include "mywindow.h" 
#include <QPushButton> 
#include <QHBoxLayout> 
#include <QVBoxLayout> 
#include <QTextBlock> 
#include <qstring.h> 

class WorkSpace : public QWidget 
{ 
    Q_OBJECT 

public: 
    WorkSpace(QWidget *parent = 0); 
    ~WorkSpace(); 
    QHBoxLayout *HLayout; 
    QVBoxLayout *VLayout; 
    QPushButton *TabButton; 
    QPushButton *SimpleButton; 
    QPushButton *AddButton; 
    MyMdiArea *area; 
    QString str; 


private: 
    Ui::WorkSpaceClass ui; 
}; 

MyMdiArea.h

#ifndef MYMDIAREA_H 
#define MYMDIAREA_H 

#include <QWidget> 
#include <QMdiArea> 
#include <qmessagebox.h> 
#include <qpixmap.h> 
#include <qpainter.h> 
#include "ui_mymdiarea.h" 

class MyMdiArea : public QMdiArea 
{ 
    Q_OBJECT 

public: 
    QString str1; 
    void SendSignal(); 
    MyMdiArea(QWidget *parent,QString str); 
    ~MyMdiArea(); 
    void mouseDoubleClickEvent(QMouseEvent *event); 

public slots: 
    void AddSubWindow(bool t); 
signals: 
    void doubleClicked(bool t); 
private: 
    Ui::MyMdiArea ui; 
    QPixmap logo; 

protected: 
    void paintEvent(QPaintEvent *event); 
}; 

#endif // MYMDIAREA_H 

回答

1

的問題是:

Signal clicked()沒有參數,但槽AddSubWindow()具有布爾類型的參數。這是Qt中允許的而不是

+0

你救了我的命)) – zuzman322

1

嘗試改變你這樣的代碼

.H

public slots: 
void AddSubWindow(); 

的.cpp

void MyMdiArea::AddSubWindow() 
{ 
QString str="заголовок"; 
MyWindow *widget = new MyWindow(0,str1); 

addSubWindow(widget); 
widget->setWindowTitle(str1); 
widget->show(); 


} 
+0

我做到了已經。謝謝) – zuzman322