2012-01-24 3 views
2

Я создал QMainWindow с помощью QT Designer. У меня есть компоненты, у которых есть слоты сигналов. Я создал некоторые компоненты QObject, отличные от gui, поэтому я также могу использовать механизм сигнала/слота.Подключение QDialog к QMainWindow

Следующим шагом было добавить немодальный диалог. Я не хочу, чтобы диалог блокировал главное окно. Я бы хотел, чтобы диалог оставался активным (где-то видимым для пользователя или в фоновом режиме), пока пользователь не закроет его. Я создал модельный объект QDialog с дизайнером. Диалоговое окно появляется по мере необходимости. Он также сохраняет информацию из предыдущего сеанса в текстовом поле. Это просто имя файла.

Однако, когда я начал подключать QDialog к QMainWindow, механизм сигнала/слота не работает.

Это мой код:

//In the .h file declared as member of the QMainWindow 
ScriptDialog *theScriptDialog; 

//In the .cpp file, the constructor of QMainWindow 
theScriptDialog = new ScriptDialog(this); 

QObject::connect(theScriptDialog, SIGNAL(notifyStartScript(QString)), SLOT (startScripting(QString))); 

Может быть, я ложному дерево. Есть ли лучший способ создать всплывающее окно, подобное этому?

ответ

0

Сначала проверьте, выполнено ли соединение успешно: проверьте вывод консоли приложений для предупреждения о сбое подключения, затем распечатайте возвращаемое значение соединения.

Тогда некоторые вещи, чтобы сделать:

  • У вас есть Q_OBJECT макрос в scriptdialog.h
  • Вы вспомнили запустить QMAKE после добавления новых Q_OBJECT классов
  • Добавить qDebug печати/останова в котором notifyStartScript является испускаемый
  • Подключить что-нибудь еще к startScripting слоту, с qDebug печатью или точкой останова, чтобы убедиться, что она называется
  • Если вы использовали встроенные сборки (например, просто запустить qmake и сделать из командной строки в исходном каталоге), затем переключитесь на «теневую сборку» в отдельном каталоге dir, убедитесь, что исходный каталог чиста от созданного .cpp, .h и .o.
Смежные вопросы