#c #qt #class #connect #slot
#c #qt #класс #Контакты #слот
Вопрос:
Используя Qt4, как мне создать класс для создания СЛОТА для управления setTextSizeMultiplier в QWebView, используя CONNECT с QSLIDER.
Мой код: (панель слайдера — это QSlider, а vweb — это QWebView)
class webextras
{
Q_OBJECT::Ui_ywr *pui;
public slots:
void wtresize(int wtr)
{
pui->vweb->setTextSizeMultiplier(wtr);
}
};
connect(thesliderbar,SIGNAL(valueChanged(int)),webextras,SLOT(wtresize(int)));
Я получаю ошибки для connect();.
Ошибки:
ywr.cpp:31: ошибка: ожидаемое первичное выражение перед ‘,’ токеном
ywr.cpp:-1: В конструкторе ‘ywr::ywr(QWidget*)’:
Ответ №1:
Сначала, чтобы ваш класс поддерживал сигналы / слоты, он должен наследоваться от QObject.
Во-вторых, вы должны использовать макрос Q_OBJECT
, который необходим из инструмента moc:
Компилятор метаобъектов moc — это программа, которая обрабатывает расширения Qt на C .
Инструмент moc считывает файл заголовка C . Если он находит одно или несколько объявлений класса, содержащих макрос Q_OBJECT, он создает исходный файл C , содержащий код метаобъекта для этих классов. Среди прочего, для механизма сигналов и слотов требуется код метаобъекта, информация о типе во время выполнения и система динамических свойств.
Итак, ваш класс должен быть:
class webextras : public QObject
{
Q_OBJECT;
public slots:
void wtresize(int wtr)
{
pui->vweb->setTextSizeMultiplier(wtr);
}
};
Что такое Ui_ywr *pui
? Q_OBJECT
это макрос, вы не можете объявить его так, как вы это сделали.
Комментарии:
1. Спасибо 🙂 Я решил добавить функцию в существующий класс, и это сработало.