2016-05-17 4 views
0

Я новичок здесь.QObject :: connect: Нет такого слота QWidget :: makeyourbox() in occQt.cpp: 324

пользовательский интерфейс работать хорошо, но когда я нажимаю 'okbtn' ...

QObject::connect: No such slot QWidget::makeyourbox() in occQt.cpp:324 

И когда я нажимаю 'cancelbtn', он работает.

Спасибо за любые ответы, Eason

код:

void occQt::about2() //UI 
{ 
    QWidget* pWidget = new QWidget; 
    QLabel* longlabel = new QLabel(tr("long")); 
    QLabel* widthlabel = new QLabel(tr("width")); 
    QLabel* highlabel = new QLabel(tr("high")); 
    longlineedit = new QLineEdit; 
    widthlineedit = new QLineEdit; 
    highlineedit = new QLineEdit; 
    QPushButton* okbtn = new QPushButton(tr("ok")); 
    QPushButton* cancelbtn = new QPushButton(tr("cancel")); 
    QGridLayout* gridlayout = new QGridLayout; 
    QVBoxLayout* dlglayout = new QVBoxLayout; 
    QHBoxLayout* btnlayout = new QHBoxLayout; 
    gridlayout->addWidget(longlabel, 0, 0, 1, 1); 
    gridlayout->addWidget(widthlabel, 1, 0, 1, 1); 
    gridlayout->addWidget(highlabel, 2, 0, 1, 1); 
    gridlayout->addWidget(longlineedit, 0, 1, 1, 3); 
    gridlayout->addWidget(widthlineedit, 1, 1, 1, 3); 
    gridlayout->addWidget(highlineedit, 2, 1, 1, 3); 
    longlineedit->setText("5"); 
    widthlineedit->setText("5"); 
    highlineedit->setText("5"); 
    btnlayout->setSpacing(60); 
    btnlayout->addWidget(okbtn); 
    btnlayout->addWidget(cancelbtn); 
    //pWidget->setLayout(gridlayout); 
    dlglayout->setMargin(50); 
    dlglayout->addLayout(gridlayout); 
    dlglayout->addStretch(40); 
    dlglayout->addLayout(btnlayout); 
    pWidget->setLayout(dlglayout); 
    pWidget->setWindowTitle(tr("Make a Box by custom.")); 
    pWidget->show(); 
    connect(okbtn, SIGNAL(clicked()), pWidget, SLOT(makeyourbox())); 
    //QObject::connect(okbtn, SIGNAL(clicked()), pWidget, SLOT(close())); 
    connect(cancelbtn, SIGNAL(clicked()), pWidget, SLOT(close())); 
} 

void occQt::makeyourbox() 
{ 
    QString string_a = longlineedit->text(); 
    eason_a = string_a.toInt(); 
    QString string_b = widthlineedit->text(); 
    eason_b = string_b.toInt(); 
    QString string_c = highlineedit->text(); 
    eason_c = string_c.toInt(); 
    TopoDS_Shape aTopoBox = BRepPrimAPI_MakeBox(eason_a, eason_b, eason_c).Shape(); 
    Handle_AIS_Shape anAisBox = new AIS_Shape(aTopoBox); 
    anAisBox->SetColor(Quantity_NOC_AZURE); 
    mContext->Display(anAisBox); 
} 

Когда я бегу pWidget, нажмите cancelbtn, щ близко. Нажмите okbtn, ничего не делать ..

+0

Пожалуйста, отформатируйте код – paceholder

+0

http://stackoverflow.com/q/26422154/1421332 – Silicomancer

+0

Спасибо, он решил. – eason

ответ

1

pWidget - это общий QWidget. Он не содержит метод/слот makeyourbox(). Ваш код неисправен.

+0

Ох ... Спасибо. Я думаю, что я пойду. – eason

0

вы должны добавить makeyourbox() метод подкласса QWidget, и пометить его как слот

+0

Спасибо за ваши ответы, но я не думаю, что это должно add ... При добавлении его я получаю тот же результат .. – eason

+0

делает это? – Tiko

+0

Мой английский плохой, поэтому мне нужно больше времени, чтобы ответить вам, извините. – eason

0

Двойная проверка makeyourbox определяется как слот внутри этого класса.

Смежные вопросы