색상을 그리는 프로그램을 만들고 다른 클래스가이를 확인하고 일치하면 true를 반환합니다. 그 중 전체 코드는 대화 상자에 있습니다. colQ는 단순히 RGB 값 및 기타 항목을 저장하는 클래스입니다. 우리는 이것을 사용하여 RGB를 얻습니다.keyPressEvent에 충돌이 발생했습니다.
colDialog::colDialog(QWidget *parent) // etc..
{
// initialization code
colQ.setColor(255, 0, 0); // red
r_ans = g_ans = b_ans = nullptr;
}
그러면 그림을 그리는 페인트 이벤트가 발생합니다. r1 및 br1은 각각의 클래스에 대한 포인터입니다.
void Atn_QDialog::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
r1 = new QRect(100, 100, 175, 400);
br1 = new QBrush(QColor(colQ.getR, colQ.getG, colQ.getB));
painter.fillRect(*r1, *br1);
painter.drawRect(*r1);
// other color code
}
이 시점에서 빨간색으로 그려지는 직사각형을 갖게됩니다. 지금하고 싶은 것은 사용자가 1과 같은 키를 누른 다음 colQ가 저장된 색상이 키가 눌러 진 사각형의 색상과 일치하는지 확인합니다.
void colDialog::keyPressEvent(QKeyEvent *Ev)
{
if (Ev->key() == Qt::Key_1)
{
br1->color().getRgb(r_ans, g_ans, b_ans);
colQ.answer(*r_ans, *g_ans, *b_ans);
if (colQ.isCorrect())
ui->resultlabel->setText("correct!");
else ui->resultlabel->setText("wrong!");
}
// other key presses here
QDialog::keyPressEvent(Ev);
}
코드가 구현 된 곳에서 '1'키를 누르면 버그가 발생합니다. 이전에는 키를 누르면 정상적으로 응답하지만이 코드를 실행하면 응답하지 않습니다. Fyi, colQ는 Qt 코드가없고 코드를 생략하면 프로그램이 여전히 충돌을 일으 킵니다. 여기서 내가하는 일은 QBrush * 타입의 br에 저장된 색상을 얻고 싶습니다. getRgb (..)에 포인터를 전달 했으므로 요청한 것입니다. keyPressEvent (Ev)에서 코드가 효과적으로 충돌합니다. ui-> resultlabel->> setText ("...")와 같은 것은 프로그램이 키를 눌렀을 때 충돌을 일으키지 않습니다. 앞에서 언급 한 함수 호출에서만 발생합니다.
나는 생성자에서 nullptr에 대해 r_ans, g_ans 및 b_ans를 초기화했습니다. 코드가 작동하기에 충분하지 않습니까? – Poriferous
@Vormeph 아니, 당신은 그들을 위해 메모리를 할당해야 내 편집을 참조하십시오. – Iuliu
처음에는 작동하지 않았지만 나중에 포인터의 인라인 초기화를 중단하고 대답을 다른 함수로 옮겼습니다. 당신의 도움을 주셔서 감사합니다! – Poriferous