2014-11-04 2 views
1

전 QT가 완전히 새 거예요. 나는 4 개의 라디오 버튼, 클릭 버튼 및 일반 텍스트 편집 필드 (QT Creator에서)로 약간의 양식을 작성했습니다. 내 목표는 푸시 버튼을 누르고 plaintextedit에서 텍스트 변경 사항을 얻는 것입니다 ("Some text here"). 불행히도 버튼과 텍스트 필드를 연결하는 올바른 수식을 찾을 수 없으므로 오류가 발생하여 아직 알 수 없습니다.QT 버튼 일반 텍스트 편집을 클릭하십시오.

mainwindow.h :

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QRadioButton> 
#include <QPushButton> 
#include <QPlainTextEdit> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

public slots: 
    void on_pushButton_clicked(); 

private: 
    Ui::MainWindow *ui; 
    QRadioButton radioButton,radioButton_2,radioButton_3,radioButton_4; 
    QPushButton pushButton; 
    QPlainTextEdit plainTextEdit; 
}; 

#endif // MAINWINDOW_H 

MAIN.CPP :

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 

mainwindow.cpp :

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
//#include <QPushButton> 
//#include <QPlainTextEdit> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    QObject::connect(pushButton,SIGNAL(clicked()),plainTextEdit,SLOT(on_pushButton_clicked())); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::on_pushButton_clicked() 
{ 
    plainTextEdit.setPlainText("Some text here"); 
} 

은 여기 여기에 코드 (필자는 GUI의 XML 부분을 생략는)입니다 오류 출력 :

/home/user/workspace/ButtonRadio/mainwindow.cpp:-1: In constructor 'MainWindow::MainWindow(QWidget*)': 
/home/user/workspace/ButtonRadio/mainwindow.cpp:11: error: no matching function for call to 'MainWindow::connect(QPushButton&, const char*, QPlainTextEdit&, const char*)' 
/home/user/workspace/ButtonRadio/mainwindow.cpp:11: candidates are: 
/usr/include/qt4/QtCore/qobject.h:204: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType) 
/usr/include/qt4/QtCore/qobject.h:204: note: no known conversion for argument 1 from 'QPushButton' to 'const QObject*' 
/usr/include/qt4/QtCore/qobject.h:217: static bool QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType) 
/usr/include/qt4/QtCore/qobject.h:217: note: no known conversion for argument 1 from 'QPushButton' to 'const QObject*' 
/usr/include/qt4/QtCore/qobject.h:337: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const 
/usr/include/qt4/QtCore/qobject.h:337: note: no known conversion for argument 1 from 'QPushButton' to 'const QObject*' 
,

난 그냥

QObject::connect(pushButton,SIGNAL(clicked()),SLOT(on_pushButton_clicked())); 

다음 오류 출력이 약간 변경 작성하는 경우,하지만 본질은 여전히 ​​동일합니다. 이 문제를 어떻게 해결할 수 있습니까?

--edit - 15.11.14--

mainwindow.h : ...

private: 
    Ui::MainWindow *ui; 
    QRadioButton *radioButton,*radioButton_2,*radioButton_3,*radioButton_4; 
    QPushButton *pushButton; 
    QPlainTextEdit *plainTextEdit; 
}; 

mainwindow.cpp : 결과

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow), 
    pushButton(new QPushButton(this)), 
    plainTextEdit(new QPlainTextEdit(this)) 
{ 
    ui->setupUi(this); 
    //pushButton = new QPushButton(this); 
    //plainTextEdit = new QPlainTextEdit(this); 
    QObject::connect(pushButton,SIGNAL(clicked()),plainTextEdit,SLOT(on_pushButton_clicked())); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::on_pushButton_clicked() 
{ 
    plainTextEdit->setPlainText("Some text here"); 
} 

, 내가 할 다음 출력을 가진 SIGSEGV :

amember "1on_pushButton_clicked()" char * 
asender @0x2 QObject 
asignal "2clicked()" char * 
atype Qt::AutoConnection(0) Qt::ConnectionType 
this @0x7fffffffe640 QObject 

또한 qobject.h에서 다음 줄을 가리키는 :

339 { return connect(asender, asignal, this, amember, atype); } 
349 T qFindChild(const QObject *o, const QString &name = QString()); 
350 QList<T> qFindChildren(const QObject *oobj, const QString &name = QString()); 
351 QList<T> qFindChildren(const QObject *o, const QRegExp &re); 
+0

QRadioButton * 라디오 버튼, * radioButton_2 * radioButton_3 * radioButton_4; QPushButton * pushButton; QPlainTextEdit * plainTextEdit; 그런 다음 새로운 –

답변

0

이 오류 때문에 connect 사용 포인터를 얻는다. 당신은 포인터를 사용한다 :

QRadioButton *radioButton,*radioButton_2,*radioButton_3,*radioButton_4; 
QPushButton *pushButton; 
QPlainTextEdit *plainTextEdit; 

당신이 포인터 모든 .->로 대체 사용하는 경우.

...(maybe you meant to use '->' ?) radioButton_2.show(); 

와 연결이되어야합니다 :

connect(pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked())); 

또는

미래에
connect(pushButton,SIGNAL(clicked()),SLOT(on_pushButton_clicked())); 

가 :

QObject obj1; 
QObject obj2; 
connect(&obj1,SIGNAL(someSigna()),&obj2,SLOT(slot())); 
: 당신이 쓸 수 컴파일러는 다음 오류와 실수에 대해 알려줍니다

보시다시피, &

당신은에서 (main.cpp 예를 들면)하지 QObject 서브 클래스에 QObject::connect을 쓸 필요가 당신의 MainWindow 당신이 new으로 메모리를 할당해야 포인터를 사용할 때 그냥 connect

또한 쓸 수 있습니다. 예를 들어 :

pushButton = new QPushButton(this);//in constructor 
//and so on 

thisthis (우리 MainWindow)는 부모가 그렇게 pushButton이 아닌 별도의 창에서 MainWindow에 나타납니다 것을 우리에게 보여 곳.

이 코드에서 큰 실수를 모두 언급했다고 생각합니다. 다음

on_pushButton_clicked()가 MainWindow를 슬랏의 아니라 plaintexteditTry :

pushButton = new QPushButton(this); 
plainTextEdit = new QPlainTextEdit(this); 
connect(pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked())); 
+0

'* radioButton_2','* radioButton_3','* radioButton_4'를 사용하여 메모리를 할당하십시오. – coyotte508

+0

감사합니다. 내 코멘트와 함께이 긴 지연 죄송합니다. 나는 당신이 말한 바를 끝냈다 - 변수를 포인터로 변경했다면 (당신이 맞았다!), pushButton에 대한 할당이 생성되고 "." on_pushButton_clicked()에서 "->"로 끝나지만, 결국 SIGSEGV Segmentation Fault가 발생합니다. 이 회신 창에 코드를 게시하는 방법을 알아낼 수 없습니다 ... – user1274925

+0

@ user1274925 일반 텍스트 메모리를 할당 했습니까? 그렇지 않다면 시도하십시오. 도움이되지 않으면 edit oj를 눌러 현재 코드를 추가하십시오. – Chernobyl

관련 문제