2013-12-07 2 views
0

Привет, я пытаюсь создать пользовательский слот с h-файлом, созданным конструктором qt4. Я вижу, как создается стандартный слот, но я бы хотел, чтобы «однажды прошлое изучение этого шага» запускать команды терминала и выводить его в текстовое поле, поэтому я пытаюсь заменить слот last() одним из них. Я могу использовать правые команды в . Вот файл файла h, который отлично работает, но ... вышеупомянутая проблема «пытается понять поток. 2-й день, поэтому любые указатели являются awsome. так вот я буду комментировать, где я думаю, что я должен работать .. но не имел успеха весь день LOL.Пользовательский слот из созданного qt4 проекта h файла

#ifndef SWEETGUIFORMQ19488_H 
#define SWEETGUIFORMQ19488_H 

#include <QtCore/QVariant> 
#include <QtGui/QAction> 
#include <QtGui/QApplication> 
#include <QtGui/QButtonGroup> 
#include <QtGui/QDialogButtonBox> 
#include <QtGui/QHeaderView> 
#include <QtGui/QTextEdit> 
#include <QtGui/QVBoxLayout> 
#include <QtGui/QWidget> 

QT_BEGIN_NAMESPACE 

class Ui_SweetGuiForm 
{ 
public: 
    QVBoxLayout *verticalLayout_2; 
    QVBoxLayout *verticalLayout; 
    QTextEdit *textEdit; 
    QDialogButtonBox *buttonBox; 

    void setupUi(QWidget *SweetGuiForm) 
    { 
     if (SweetGuiForm->objectName().isEmpty()) 
      SweetGuiForm->setObjectName(QString::fromUtf8("SweetGuiForm")); 
     SweetGuiForm->resize(511, 275); 
     verticalLayout_2 = new QVBoxLayout(SweetGuiForm); 
     verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2")); 
     verticalLayout = new QVBoxLayout(); 
     verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); 
     textEdit = new QTextEdit(SweetGuiForm); 
     textEdit->setObjectName(QString::fromUtf8("textEdit")); 

     verticalLayout->addWidget(textEdit); 

     buttonBox = new QDialogButtonBox(SweetGuiForm); 
     buttonBox->setObjectName(QString::fromUtf8("buttonBox")); 
     buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); 

     verticalLayout->addWidget(buttonBox); 


     verticalLayout_2->addLayout(verticalLayout); 

     QWidget::setTabOrder(textEdit, buttonBox); 

     retranslateUi(SweetGuiForm); 
     QObject::connect(buttonBox, SIGNAL(rejected()), SweetGuiForm, SLOT(close())); 

хорошо здесь я думаю, я мог бы заменить пасту() с on_buttonBox_accepted(), пожалуйста, поправьте меня, я действительно все еще quessing в этой точке, но где я могу правильно функцию? я делаю файл в файле sweetguiform.cpp? это где im lost .. help .. QObject :: connect (buttonBox, SIGNAL (принято()), textEdit, SLOT (paste()));

 QMetaObject::connectSlotsByName(SweetGuiForm); 
    } // setupUi 

    void retranslateUi(QWidget *SweetGuiForm) 
    { 
     SweetGuiForm->setWindowTitle(QApplication::translate("SweetGuiForm", "Form", 0, QApplication::UnicodeUTF8)); 
    } // retranslateUi 

}; 
namespace Ui { 
    class SweetGuiForm: public Ui_SweetGuiForm {}; 
} // namespace Ui 

QT_END_NAMESPACE 

#endif // SWEETGUIFORMQ19488_H 

Действительно ли это способ сделать что-то новое?

ответ

1

Думаю, вы не должны редактировать файл заголовка, который генерирует Qt для вас. Вместо этого вы должны написать собственный файл заголовка/реализации, который включает в себя этот автоматически сгенерированный заголовок и устанавливает там соединения сигнального слота. Например:

#include "ui_SweetGuiForm.h" 

class SweetGuiForm : public QWidget 
{ 
public: 
    SweetGuiForm(): ui(new Ui::SweetGuiForm) 
    { 
     ui->setupUi(this); 
    } 

public slots: 
    void on_buttonBox_accepted() 
    { 
     // your code here 
    } 

protected: 
    Ui::SweetGuiForm* ui; 
}; 

Qt найдет способ on_buttonBox_accepted и настроить соединение сигнал-слот для вас, так что вам не придется вызывать QObject::connect.

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