Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
3 / 3 / 2
Регистрация: 14.11.2013
Сообщений: 35
1

Invalid conversion from 'QObject*' to 'QWidget*'

19.01.2016, 04:08. Показов 4367. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Пытаюсь сделать принтер. За основу беру пример из книги Макса Шлее. Ошибка указана к топике, ссылается в менеджер моих форм, вот сюда:

C++ (Qt)
1
2
3
4
5
6
void FormsManager::openPrinterForm() {
    this->engine->load( QUrl( FORM_PRINTER ) );
 
    this->printerForm = new PrinterForm(engine->rootObjects()[0]);
    this->engine->rootContext()->setContextProperty("printerClass", printerForm);
}
Вот мой принтер:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "PrinterForm.h"
#include "FormsManager.h"
 
PrinterForm::PrinterForm(QWidget *pwgt/*=0*/) :QWidget(pwgt){
    m_pprinter = new QPrinter; //constructor
    //this->m_pprinter=pwgt;
}
 
/*virtual*/ PrinterForm::~PrinterForm()
{
    delete m_pprinter;
}
 
void PrinterForm::paintEvent(QPaintEvent* pe)
{
    draw(this);
}
 
void PrinterForm::slotPrint()
{
    QPrintDialog dlg(m_pprinter, this);
    dlg.setMinMax(1,10);
    if (dlg.exec()==QDialog::Accepted)
    {
        draw(m_pprinter);
    }
}
 
void PrinterForm::draw(QPaintDevice* ppd)
{
    QPainter painter(ppd);
    QImage image("D:/test.png");
    QRect r = painter.viewport();
    QSize size = image.size();
    size.scale(r.size(), QSize::ScaleMin);
    painter.setViewport(r.x(), r.y(), size.width(), size.height());
    painter.setWindow(image.r());
    painter.drawImage(0, 0, image);
 
}
Вот хедер:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef PRINTERFORM_H
#define PRINTERFORM_H
#pragma once
 
#include <QDebug>
#include <QImage>
#include <QPixmap>
#include <QPainter>
#include <QDir>
#include <QFile>
#include <QtCore>
#include <QWidget>
#include <QPaintDevice>
#include <QPrintDialog>
 
class QPrinter;
class QPaintDevice;
 
class PrinterForm : public QWidget
{
    Q_OBJECT
 
private:
    QPrinter* m_pprinter;
 
protected:
    virtual void paintEvent(QPaintEvent* pe);
    void draw(QPaintDevice* ppd);
 
public:
    PrinterForm(QWidget* pwgt=0);
    virtual ~PrinterForm();
 
signals:
 
public slots:
    void slotPrint();
 
protected:
};
 
#endif // PRINTERFORM_H
Пробовала задавать тип QObject для формы PrinterForm, однако не помогло.
Странно, ведь QObject наследуется QWidget..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2016, 04:08
Ответы с готовыми решениями:

Ошибка преобразования QObject в QWidget . Передача свойств в обработчик событий
Есть класс таблицы, унаследованный от QTableWidget. В нем - переменная mode. #include...

Invalid conversion from «void*» to «T*»
Всем привет. У меня вопрос связанный с преобразованием указателей, а точнее неявное преобразование...

Ошибка : QObject::connect(QNetworkReply, MainWindow): invalid null parameter
Сам код connect(reply, &amp;QNetworkReply::downloadProgress, this, &amp;MainWindow::onUpdateProgress); ...

Invalid conversion from 'LRESULT' to 'DlgProc'
void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { ...

6
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
19.01.2016, 06:25 2
Цитата Сообщение от M-39 Посмотреть сообщение
engine->rootObjects()[0]
Какой тип имеет?
1
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
19.01.2016, 08:58 3
Попробуйте
C++ (Qt)
1
this->printerForm = new PrinterForm(qobject_cast<QWidget *>(engine->rootObjects()[0]));
А вообще автоматическое преобразование возможно от производного класса к базовому, а не наоборот.
1
3 / 3 / 2
Регистрация: 14.11.2013
Сообщений: 35
19.01.2016, 10:00  [ТС] 4
Какой тип имеет?
engine типа QQmlApplicationEngine, а rootObjects типа QList<QObject*>.

Попробуйте
Теперь ругается, что invalid use of incomplete type 'class QPrinter' в исходнике, строка:
C++ (Qt)
1
m_pprinter = New QPrinter;
0
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
19.01.2016, 10:27 5
подключите QPrinter
1
3 / 3 / 2
Регистрация: 14.11.2013
Сообщений: 35
19.01.2016, 18:36  [ТС] 6
Да. Проблема решилась! До этого #include <QPrinter> отображался как ошибка.
0
16 / 16 / 10
Регистрация: 20.11.2015
Сообщений: 305
02.07.2017, 00:20 7
Столкнулся с похожей проблемой, помогло немного другое
C++ (Qt)
1
B* b1 = dynamic_cast<B*>(reinterpret_cast<A*>(c));
нашел тут
* на всякий, вдруг кому пригодится
0
02.07.2017, 00:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2017, 00:20
Помогаю со студенческими работами здесь

Invalid conversion from `void*' to `int*'
Не могу разобраться с ошибкой выдаваемой компилятором. In function `void merge(char*, long...

20: invalid conversion from `int (*)()' to `char'
помогите исправит ошибку-20: invalid conversion from `int (*)()' to `char' #include &lt;iostream&gt;...

Invalid conversion from `int' to `const char*'
Здравствуйте.Возникла проблема с типами данных, пытался решить - стало хуже...:wall: Вот сам код:...

Ошибка invalid conversion from 'char*' to 'int'
Задание: ввести максимальное количество строк, затем вводить строки, пока не наберется 5 строк с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru