2012-04-08 2 views
2

Я пытаюсь сделать программу, которая принимает сигнал от одного класса и с активацией этого сигнала. Я хочу активировать слот второго класса.Исправить сигнал между двумя классами в Qt

В моем случае первый класс является классом mainWindow, этот класс является подклассом QMainWindow, а в этом классе является слот, который я хочу активировать.

Это mainwindow.cpp:

mainWindow::mainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::mainWindow) 
{ 
    ui->setupUi(this); 
} 

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

void mainWindow::slotForStatusBarMessage(QString string) 
{ 
    statusBar()->showMessage(string); 
} 

Второй класс это класс mainWidget и это подкласс QWidget.

Это mainWidget.cpp:

mainWidget::mainWidget(QWidget *parent) : 
    QWidget(parent) 
{ 
    buttonAddNewRecord=new QPushButton("Add new record", this); 

    layoutButton=new QHBoxLayout(); 
    layoutButton->addWidget(buttonAddNewRecord); 

    layoutMain=new QVBoxLayout(); 
    layoutMain->addLayout(layoutButton); 

    functionDatabaseOpen(); 

    setLayout(layoutMain); 
} 

Сигнал emited из functionDatabaseOpen функции():

if (sqlDatabase.open()) 
{ 
    emit signalForShowMessageInStatusBar("true"); 
} 
else 
{ 
    emit signalForShowMessageInStatusBar("false"); 
} 

Я сделал все настройки в базе данных, но я не копировать сюда из-за пространство.

Я попытался установить соединение внутри main.cpp, но, похоже, он работает доцент.

QObject::connect(mw, SIGNAL(signalForShowMessageInStatusBar(QString)), w, SLOT(slotForStatusBarMessage(QString))); 

Я не могу сделать этот сигнал/слот между классами работать. Можете ли вы мне помочь.

Если у вас есть вопросы о коде, пожалуйста, спрашивайте. Извините за плохой английский, я не являюсь носителем английского языка.

Большое спасибо за помощь.

+0

Какие ошибки компилятор дает? Где вы создаете экземпляр обоих классов? – alexisdm

+1

Если код компилируется, обратите внимание на вывод stdout или debug - Qt будет печатать материал, если ему нужно вызвать сигнал и не может найти подключенный слот. – Eugene

+0

@alexisdm это результат: Начало/home/kudic/untitled136-build-desktop/untitled136 ... /home/kudic/untitled136-build-desktop/untitled136 завершен с кодом 0 – depecheSoul

ответ

3

Вы излучаете сигнал от конструктора mainWidget, и поскольку соединение выполняется только после того, как вы вернетесь от этого конструктора, сигнал никуда не денется.

Простейшее исправление, не зная, как выглядит остальная часть кода, состояло бы в том, чтобы перевести вызов на functionDatabaseOpen() в main() после установления соединения сигнал/слот.

+1

. Я думаю, что можно с уверенностью сказать, что излучение сигнала внутри конструктора никогда не имеет смысла, поскольку вы никогда не сможете подключиться к это вовремя. Хороший улов. +1 – jdi

+0

@alexisdm спасибо Я не знал, что emit can not будет использоваться в конструкторе, то есть whay emiting не работает – depecheSoul

+1

@depecheSoul вы должны принять этот ответ, если он решил вашу проблему – chwi

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