Пользовательский слот из файла h, созданного дизайном qt4

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

#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()));

Хорошо, я думаю, я мог бы заменить paste () на on_buttonBox_accepted (), пожалуйста, поправьте меня, я действительно все еще сомневаюсь, но где я могу исправить функцию? сделать это в файле с именем sweetguiform.cpp? вот где я потерялся.. помогите.. QObject::connect(buttonBox, SIGNAL(accepted()), 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

Это способ делать вещи, когда они совершенно новые?


person Brett    schedule 07.12.2013    source источник


Ответы (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.

person atsui    schedule 21.12.2013