Без полного примера трудно точно понять, что не так с вашей реализацией. Иногда сигналы или слоты не работают, если объект выходит за пределы области видимости, если он не инициализирован в куче.
Другой способ, который может привести к сбою, - это если ваше приложение QApplication не достигло вызова exec().
Я не экспериментировал с использованием const в вызовах сигналов и слотов, и я не видел его раньше ни в одном примере, так что это может быть причиной проблемы; но, похоже, в приведенном ниже примере это работает нормально.
Рабочий пример с производным классом QTextEdit
Вот простой пример, который я собрал, который выполняет базовое ведение журнала с помощью кнопки и редактирования строки.
Вот заголовок:
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
//#include <QTextEdit>
#include "clogbook.h"
#include <QLineEdit>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget() {}
public slots:
void on_pushButton();
void on_lineEditReturn();
private:
CLogBook * text_edit_log;
QLineEdit * line_edit;
};
#endif // WIDGET_H
Вот источник:
#include "widget.h"
#include <QBoxLayout>
#include <QPushButton>
#include <QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QBoxLayout * box_layout = new QBoxLayout(QBoxLayout::TopToBottom);
text_edit_log = new CLogBook;
line_edit = new QLineEdit("Type Here and press Enter.");
QPushButton * push_button = new QPushButton("Click to Add To Log");
text_edit_log->setText("My Log Book");
box_layout->addWidget(text_edit_log);
box_layout->addWidget(line_edit);
box_layout->addWidget(push_button);
this->setLayout(box_layout);
QObject::connect(push_button, SIGNAL(clicked()), this, SLOT(on_pushButton()));
QObject::connect(line_edit, SIGNAL(returnPressed()), this, SLOT(on_lineEditReturn()));
}
void Widget::on_pushButton()
{
// text_edit_log->append("Push Button Logging Test");
text_edit_log->recvLogSignal("Push button test.");
}
void Widget::on_lineEditReturn()
{
// text_edit_log->append(line_edit->text());
text_edit_log->recvLogSignal(QString("LineEdit: ") + line_edit->text() );
line_edit->clear();
}
И вот основное:
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
А вот и класс CLogBook:
#ifndef CLOGBOOK_H
#define CLOGBOOK_H
#include <QTextEdit>
#include <iostream>
class CLogBook : public QTextEdit
{
Q_OBJECT
public:
explicit CLogBook(QWidget *parent = 0) : QTextEdit(parent) { }
void log (QString msg) { append(msg); }
public slots:
void recvLogSignal(const QString message)
{
append("hallo");
std::cout << "signal received.\n" << std::endl;
log(message);
}
};
#endif // CLOGBOOK_H
person
phyatt
schedule
09.06.2012
cout
сообщений? - person cmannett85   schedule 09.06.2012const
передача по значению - это не обычный способ сделать что-то, есть ли причина, по которой вы это делаете? - person tmpearce   schedule 09.06.2012message
или это другая функция? - person Anthony   schedule 09.06.2012