所以我想将QScrollArea的高度和宽度发送到我的QWidget(两者都是从这两个派生的自定义类)但是我不想让它变得糟糕。
customScrollArea *scrollArea;
RenderArea *scrollAreaWidgetContents;
void customScrollArea::resizeEvent(QResizeEvent* event)
{
QScrollArea::resizeEvent(event);
emit sizeChanged(width(),height());
}
MyGUI::MyGUI(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyGUI)
{
ui->setupUi(this);
connect(ui->scrollArea, SIGNAL(customScrollArea::sizeChanged(int,int)), ui->scrollAreaWidgetContents, SLOT(RenderArea::setSize(int,int)));
}
void RenderArea::setSize(int x, int y)
{
scrollwidth = x;
scrollheight = y;
}
当我编译时,我在mygui.cpp:10中得到错误“QScrollArea :: sizeChanged(int,int)”但是它不应该是CustomScrollArea而不是QScrollArea吗?
答案 0 :(得分:2)
宏SIGNAL
和SLOT
基于文本名称比较而工作,因此对正确的资格认证很敏感。信号/插槽名称必须从不进行限定,并且任何类型必须与完全一致,与其声明中的相同。所以将代码更改为:
connect(ui->scrollArea, SIGNAL(sizeChanged(int,int)), ui->scrollAreaWidgetContents, SLOT(setSize(int,int)));
答案 1 :(得分:0)
这里有一些例子。有2个Widget:Widget和Widget2。 调整窗口小部件时,新的大小显示在Widget2 w2中。 在这个例子中,这两个小部件的信号和插槽通过以下方式连接:
chrome.runtime.onMessage.addListener(function(request) {
if (request.type === 'urlDe') {
alert(request.type + request.content);
} else if (request.type === 'urlCom') {
alert(request.type + request.content);
}
});
希望这有帮助。
widget.h:
QObject::connect(&w, &Widget::resizeSignal,
&w2, &Widget2::onResizeSignal);
widget.cpp:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
protected:
void resizeEvent(QResizeEvent* e) override;
signals:
void resizeSignal(int w, int h);
};
class Widget2 : public QWidget
{
Q_OBJECT
public:
Widget2(QWidget *parent = 0);
~Widget2();
public slots:
void onResizeSignal(int w, int h);
protected:
void paintEvent(QPaintEvent*) override;
private:
int width = 0;
int height = 0;
};
#endif // WIDGET_H
main.cpp中:
#include "widget.h"
#include <QPainter>
#include <QResizeEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{}
Widget::~Widget()
{}
void Widget::resizeEvent(QResizeEvent* e)
{
emit resizeSignal(e->size().width(), e->size().height());
QWidget::resizeEvent(e);
}
Widget2::Widget2(QWidget *parent)
: QWidget(parent)
{}
Widget2::~Widget2()
{}
void Widget2::onResizeSignal(int w, int h)
{
width = w;
height = h;
repaint();
}
void Widget2::paintEvent(QPaintEvent*)
{
QPainter painter(this);
painter.setPen(QPen(Qt::red));
painter.drawText(QPoint(50, 50),
QString("(w,h) = (%1, %2)").arg(QString::number(width), QString::number(height)));
}