Есть ли способ указать переменные между функциями из разных заголовков? - PullRequest
0 голосов
/ 04 апреля 2019

Короче я пытаюсь написать диалог настройки холста для приложения рисования. Моим первым пониманием было то, что я объявил эти две функции в двух отдельных заголовках. Мне было интересно, есть ли способ сделать указатель в функции createCanvas, который указывает на функцию createSpinBoxes?

Моим первым пониманием было то, что я объявил эти две функции в двух отдельных заголовках. Я также пытался использовать указатели, но они на самом деле не работают. Эти две функции также находятся в двух разных классах.

//This one is from a header file called "canvassetupdialog.h"
void canvasSetupDialog::createSpinBoxes()
{
int def_canW = 1920;
int def_canH = 1080;

//For the canvas Width
QSpinBox *canvasWidthSpinBox = new QSpinBox;
canvasWidthSpinBox->setRange(1, 20000);
canvasWidthSpinBox->setSingleStep(1);
canvasWidthSpinBox->setValue(def_canW);

//For the canvas Height
QSpinBox *canvasHeightSpinBox = new QSpinBox;
canvasHeightSpinBox->setRange(1, 20000);
canvasHeightSpinBox->setSingleStep(1);
canvasHeightSpinBox->setValue(def_canH);
//I wanted to be able to use these pointers in the other function below.
int *canWptr = &def_canW;
int *canHptr = &def_canH;
}

//This one is from a header file called "scribblearea.h"

void ScribbleArea::createCanvas(QImage *canvas)
{
canvas->width() = *canWptr;
canvas->height() = *canHptr;
}

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

1 Ответ

0 голосов
/ 04 апреля 2019

Измените ScribbleArea::createCanvas(), чтобы принимать ширину и высоту в качестве параметров:

void ScribbleArea::createCanvas(QImage *canvas, int width, int height)
{
    *canvas = canvas->scaled(width, height);
}

Не совсем точно, что вы пытаетесь сделать здесь.

Кроме того, ваш оригинальный код:

canvas->width() = width;

ничего не делает.canvas->width() возвращает значение int, и вы пытаетесь присвоить его.Это не работаетЯ предполагаю, что вы хотите изменить размер изображения.Для этого вам нужно использовать QImage::scaled(), чтобы создать уменьшенную копию изображения и присвоить это новое изображение оригиналу.(Вы не можете изменить размер QImage. Вы можете создавать только его уменьшенные копии.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...