Вход/Регистрация
QT 4: программирование GUI на С++
вернуться

Саммерфилд Марк

Шрифт:

finddialog.o(.text+0x28): undefined reference to

'FindDialog::QPaintDevice virtual table'

(не определена ссылка на «виртуальную таблицу

FindDialog::QPaintDevice»)

finddialog.o: In function 'FindDialog::tr(char const*. char const*)':

/usr/lib/qt/src/corelib/global/qglobal.h:1430: undefined reference to

'FindDialog::staticMetaObject'

(В функции 'FindDialog::tr(…)' не определена ссылка на

'FindDialog::staticMetaObject')

Сообщения в Visual С++ выглядят следующим образом:

finddialog.obj : error LNK2001: unresolved external symbol

"public:~virtual int __thiscall MyClass::qt_metacall(enum QMetaObject::Call,int,void * *)"

(ошибка LNK2001: неразрешенная внешняя ссылка)

При появлении подобных сообщений снова выполните команду qmake для обновления файла makefile, затем заново постройте приложение.

Теперь выполните программу. Если клавиши быстрого доступа доступны на вашей платформе, убедитесь в правильной работе клавиш Alt+W, Alt+C, Alt+B и Alt+F. Для перехода с одного виджета на другой используйте клавишу табуляции Tab. По умолчанию последовательность таких переходов соответствует порядку создания виджетов. Эту последовательность можно изменить с помощью функции QWidget::setTabOrder.

Обеспечение осмысленного порядка переходов с одного виджета на другой с помощью клавиши табуляции и применение клавиш быстрого доступа позволяют использовать все возможности приложений тем пользователям, которые не хотят (или не могут) пользоваться мышкой. Тот, кто быстро работает с клавиатурой, также предпочитает иметь возможность полного управления приложением посредством клавиатуры.

В главе 3 диалоговое окно поиска будет использовано нами в реальном приложении и мы подключим сигналы findPrevious и findNext к некоторым слотам.

Подробное описание технологии сигналов и слотов

Механизм сигналов и слотов играет решающую роль в разработке программ Qt. Он позволяет прикладному программисту связывать различные объекты, которые ничего не знают друг о друге. Мы уже соединяли некоторые сигналы и слоты, объявляли наши собственные сигналы и слоты, реализовывали наши собственные слоты и генерировали наши собственные сигналы. Давайте рассмотрим этот механизм более подробно.

Слоты почти совпадают с обычными функциями, которые объявляются внутри классов С++ (функции—члены). Они могут быть виртуальными, они могут быть перегруженными, они могут быть открытыми (public), защищенными (protected) и закрытыми (private), они могут вызываться непосредственно, как и любые другие функции—члены С++, и их параметры могут быть любого типа. Однако слоты (в отличие от обычных функций—членов) могут подключаться к сигналам, и в результате они будут вызываться при каждом генерировании соответствующего сигнала.

• Оператор connect выглядит следующим образом:

connect (отправитель, SIGNAL(сигнал), получатель, SLOT(слот));

где отправитель и получатель являются указателями на объекты QObject и где сигнал и слот являются сигнатурами функций без имен параметров. Макросы SIGNAL и SLOT фактически преобразуют свои аргументы в строковые переменные.

В приводимых ранее примерах мы всегда подключали разные слоты к разным сигналам. Существует несколько вариантов подключения слотов к сигналам.

• К одному сигналу можно подключать много слотов:

connect(slider, SIGNAL(valueChanged(int)),

spinBox, SLOT(setValue(int)));

connect(slider, SIGNAL(valueChanged(int)),

this, SLOT(updateStatusBarIndicator(int)));

При генерировании сигнала последовательно вызываются все слоты, причем порядок их вызова неопределен.

• Один слот можно подключать ко многим сигналам:

connect(lcd, SIGNAL(overflow),

this, SLOT(handleMathError));

connect(calculator, SIGNAL(divisionByZero),

this, SLOT(handleMathError));

Данный слот будет вызываться при генерировании любого сигнала.

• Один сигнал может соединяться с другим сигналом:

connect(lineEdit, SIGNAL(textChanged(const QString &)),

  • Читать дальше
  • 1
  • ...
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: