【问题标题】:Qt - drawing after receiving signalQt - 接收信号后绘图
【发布时间】:2012-10-07 12:07:49
【问题描述】:

我有一个简单的应用程序,它由一行编辑组成,用户在其中编写答案和确认按钮。如果答案是正确的,我想画一个简单的图形(例如绿色/红色圆圈)。我有三个源文件 - 主文件、表单(这里我将来自按钮的信号与来自 lineedit 的答案连接起来并确定答案是否正确)和 figureWidget,我想在其中绘制我的图。我的问题是,我不知道如何将来自“表单”的信号与我的 figureWidget 连接起来(尤其是什么和在哪里:-))有什么提示吗? 文件form.cpp:

#include <QtCore>
#include "ui_untitled.h"
#include "Form.h"
#include "figureWidget.h"

Form::Form(QWidget * parent, Qt::WindowFlags f) : QWidget ( parent,f ) {
   ui.setupUi(this);

connect(ui.pushButton, SIGNAL(buttonPressed()), this, SLOT(checkAnswer()))
 //this checks if answer is correct after pushing button
connect(this,SIGNAL(correctness(QString)),ui.figureWidget, SLOT(drawFigure(QString)));
  //I expect signal from this class (here I check the answer), and draw the circle in figureWidget
}

void Form::checkAnswer() {
 if (ui.lineEdit == "1") emit correctness(QString("right");
  else emit correctness(QString("false") 
  }

然后我有 figureWidget.cpp:

#include <QtGui>
#include <iostream>
#include "figureWidget.h"
figureWidget::figureWidget(QWidget* parent) : QWidget(parent) {
}

figureWidget::~figureWidget() {
}

void figureWidget::drawFigure(QString newVal) {
 if (newVal == correctVal) 
     update();
}

void figureWidget::paintEvent(QPaintEvent* ) {
   QPainter painter(this);
   painter.setPen(QRgb(0x0000ff00));
   painter.drawEllipse(0, 0, 10, 10);
} 

在调试中我得到: 没有这样的插槽 QWidget::drawFigure(QString) in ...

【问题讨论】:

  • doc.qt.digia.com/qt/signalsandslots.html - 很抱歉,您的问题非常含糊。您将信号连接到插槽,就是这样。如果您的代码无法按预期工作,请展示该代码,以便人们可以帮助您找出问题所在。
  • 对不起,我希望有人能明白我的意思(可能是常见问题)。反正我加了代码
  • checkAnswer 在哪里?你在哪里发出correctness 信号?
  • checkAnswer 在 form.cpp 中(连接在哪里)。这个槽也发出正确的信号
  • 那我不明白你的问题。插槽没有被调用吗?

标签: qt drawing signals


【解决方案1】:

我想你可以试试这个:

connect(this,SIGNAL(correctness(QString)),this, SLOT(drawFigure(QString)));


void Form::drawFigure(QString val)
{
   ui->figureWidget->drawFigure(val);
}

但是figureWidget怎么会出现在'ui->'之后???你不能在 UI 上静态地绘制它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2023-03-30
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多