QT C ++-如何在另一个类中引用窗口小部件

i

我正在尝试制作一个将小部件添加到布局中的按钮。

小部件完全位于UI的另一个类中。

通常,我会指向另一个类的指针(没有UI,带有窗口小部件),InkSpot *ink该类将是(类名为InkSpot),然后我会说,ui->paintAreaLayout->addWidget(ink->widget);但是那一行会导致应用程序崩溃,如果我删除它并添加没有引用该类的东西,那么它就不会崩溃。

我将提供大多数代码,以便您可以更好地了解我要执行的操作。测试按钮在第一个代码块的底部,该代码块是有问题的代码块:

inkpuppet.cpp

#include "inkpuppet.h"
#include "ui_inkpuppet.h"
#include "newdialog.h"
#include "inkspot.h"

#include <Qt>
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
#include <QDialog>
#include <QMainWindow>


InkPuppet::InkPuppet(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::InkPuppet)
{
    ui->setupUi(this);

    //connect the frame range boxes to the timeslider
    connect(ui->lowerFrameBox, SIGNAL(valueChanged(int)), this, SLOT(setMinimum(int)));
    connect(ui->upperFrameBox, SIGNAL(valueChanged(int)), this, SLOT(setMaximum(int)));

    //connect the menu items
    connect(ui->actionNew, SIGNAL(triggered()), this, SLOT(actionNew()));

    //connect test
    connect(ui->testButton, SIGNAL(clicked()), this, SLOT(testButton()));
}

InkPuppet::~InkPuppet()
{
    delete ui;
}

void InkPuppet::setMinimum(int value)
{
    ui->timeSlider->setMinimum(value);
}

void InkPuppet::setMaximum(int value)
{
    ui->timeSlider->setMaximum(value);
}

void InkPuppet::actionNew()
{
    NewDialog *dialog = new NewDialog;
    dialog->setModal(true);
    dialog->show();
}

void InkPuppet::testButton()
{
    ui->testButton->setText("working");
    //ui->paintAreaLayout->addWidget(ink->label);
    //qDebug() << ui->testButton;
    ui->paintAreaLayout->addWidget(ink->widget);
}

inkpuppet.h

#ifndef INKPUPPET_H
#define INKPUPPET_H

#include "inkspot.h"

#include <QMainWindow>

namespace Ui {
class InkPuppet;
}

class InkPuppet : public QMainWindow
{
    Q_OBJECT

public:
    explicit InkPuppet(QWidget *parent = 0);
    ~InkPuppet();
    InkSpot *ink;

private slots:
    void setMinimum(int value);
    void setMaximum(int value);
    void actionNew();
    void testButton();

public:
    Ui::InkPuppet *ui;
};

#endif // INKPUPPET_H

inkspot.cpp

#include "inkspot.h"
#include "inkpuppet.h"
#include "ui_inkpuppet.h"

#include <QtCore>
#include <QtGui>
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>


void InkSpot::paintEvent(QPaintEvent *event)
{
    QWidget *widget = new QWidget();
    widget->setFixedSize(100, 150);
    QLabel *label = new QLabel();
    label->setText("test");
    widget->layout()->addWidget(label);
    //InkPuppet.ui->paintAreaLayout->addWidget(widget);

    QFile *brushInput; //takes raw 8 bit grayscale image, 8 bit values only
    char *brushProto;
    uchar *brushData;

    brushInput = new QFile("x:\\Development\\InkPuppet\\brush.raw"); //open the raw file
    brushInput->open(QIODevice::ReadOnly);
    QDataStream in;
    in.setDevice(brushInput);
    int size = brushInput->size(); //set size to length of raw file

    brushProto = new char[size];
    in.readRawData(brushProto, size); //read file into prototype
    brushData = new uchar[size];

    for(int i = 0; i < size; ++i)
    {
        brushData[i] = (uchar)brushProto[i]; //copy char to uchar array
    }

    QImage test(brushData, 128, 128, QImage::Format_Indexed8);
    QImage test2(128, 128, QImage::Format_ARGB32);

    QVector<QRgb> vectorColors(256); //create color table
    for(int c = 0; c < 256; c++)
    {
        vectorColors[c] = qRgb(c, c, c);
    }

    test.setColorTable(vectorColors);

    for(int iX = 0; iX < 100; ++iX)
    {
        for(int iY = 0; iY < 100; ++iY)
        {
            test2.setPixel(iX, iY, qRgba(255 - (qrand() % 100), 0 + (qrand() % 100), 0 + (qrand() % 100), qAbs((int)test.pixel(iX, iY)-255)));
        }
    }

    //final conversion for stencil and color brush
    QPixmap testPixmap = QPixmap::fromImage(test2);
    QPixmap testPixmap2 = QPixmap::fromImage(test);

    QPainter painter(this);

    painter.drawPixmap(150, 50, 100, 100, testPixmap);
    painter.drawPixmap(50, 50, 100, 100, testPixmap2);

    delete[] brushProto;
    delete[] brushData;
    delete brushInput;
}

inkspot.h

#ifndef INKSPOT_H
#define INKSPOT_H

#include <QObject>
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QLabel>

namespace Ui {
class InkSpot;
}

class InkSpot : public QWidget
{
    Q_OBJECT
public:
    explicit InkSpot(QWidget *parent = 0);
    ~InkSpot();
    void draw(QPainter *painter);
    QWidget *widget;
    QLabel *label;
signals:

public slots:

protected:
    void paintEvent(QPaintEvent *event);

private:
    Ui::InkSpot *ui;

};

#endif // INKSPOT_H
相信

我认为,您的错误在另一个地方。如果使用指针-NULL每次使用时检查它们是否不相等

我尚未ink在您的代码中找到的初始化请检查一下。

另外,不时清理您的构建-可以防止某些错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法从Qt中的另一个窗口小部件访问窗口小部件中的控件

来自分类Dev

如何在Qt中将拖放小部件实现到另一个容器?

来自分类Dev

在Qt中将小部件居中放置在另一个小部件中

来自分类Dev

另一个小部件Qt中的小部件

来自分类Dev

另一个小部件Qt中的小部件

来自分类Dev

Python Qt - 如何从另一个线程在表小部件中插入项目?

来自分类Dev

Qt / C ++-在关闭一个小部件时关闭两个小部件

来自分类Dev

如何在另一个类 C# Windows Forms 中引用一个类

来自分类Dev

将变量从主窗口传递到另一个 qt C++ 表单

来自分类Dev

如何在Qt中管理另一个窗口?

来自分类Dev

Qt / C ++:从另一个类获取Ui QLineEdit文本

来自分类Dev

如何在Qt中的另一个类中发出信号?

来自分类Dev

Qt:如何在状态栏中添加两个小部件(例如QPushButton),一个添加到左侧,另一个添加到右侧?

来自分类Dev

Qt - 另一个类中的主窗口类对象不能正常工作

来自分类Dev

在QT C ++中逐渐消失的小部件

来自分类Dev

在QT C ++中逐渐消失的小部件

来自分类Dev

Qt:在另一个QGraphicsItem C ++中限制QGraphicsItem的可移动区域

来自分类Dev

如何将对象的引用存储在另一个类 C++ 中?

来自分类Dev

如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

来自分类Dev

Qt:如何创建一个可滚动的,所有者绘制的窗口小部件

来自分类Dev

Qt:如何创建一个可滚动的,所有者绘制的窗口小部件

来自分类Dev

QT:如何关闭同一个小部件的多个窗口?

来自分类Dev

如何在Unity C#脚本中引用另一个项目

来自分类Dev

如何在C ++中将类对象的引用正确传递到另一个类对象

来自分类Dev

如何在C ++中将指向一个类的指针复制到另一个类中?

来自分类Dev

如何在c#Unity中从另一个脚本扩展类

来自分类Dev

C ++ Qt如何工作?

来自分类Dev

如何在 C++ 中创建一个简单的 GUI;没有 Qt、Gtk 或 Mondo?

来自分类Dev

如何在WPF中将对象从一个窗口绑定到另一个窗口中的另一个控件?(C#)

Related 相关文章

  1. 1

    无法从Qt中的另一个窗口小部件访问窗口小部件中的控件

  2. 2

    如何在Qt中将拖放小部件实现到另一个容器?

  3. 3

    在Qt中将小部件居中放置在另一个小部件中

  4. 4

    另一个小部件Qt中的小部件

  5. 5

    另一个小部件Qt中的小部件

  6. 6

    Python Qt - 如何从另一个线程在表小部件中插入项目?

  7. 7

    Qt / C ++-在关闭一个小部件时关闭两个小部件

  8. 8

    如何在另一个类 C# Windows Forms 中引用一个类

  9. 9

    将变量从主窗口传递到另一个 qt C++ 表单

  10. 10

    如何在Qt中管理另一个窗口?

  11. 11

    Qt / C ++:从另一个类获取Ui QLineEdit文本

  12. 12

    如何在Qt中的另一个类中发出信号?

  13. 13

    Qt:如何在状态栏中添加两个小部件(例如QPushButton),一个添加到左侧,另一个添加到右侧?

  14. 14

    Qt - 另一个类中的主窗口类对象不能正常工作

  15. 15

    在QT C ++中逐渐消失的小部件

  16. 16

    在QT C ++中逐渐消失的小部件

  17. 17

    Qt:在另一个QGraphicsItem C ++中限制QGraphicsItem的可移动区域

  18. 18

    如何将对象的引用存储在另一个类 C++ 中?

  19. 19

    如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

  20. 20

    Qt:如何创建一个可滚动的,所有者绘制的窗口小部件

  21. 21

    Qt:如何创建一个可滚动的,所有者绘制的窗口小部件

  22. 22

    QT:如何关闭同一个小部件的多个窗口?

  23. 23

    如何在Unity C#脚本中引用另一个项目

  24. 24

    如何在C ++中将类对象的引用正确传递到另一个类对象

  25. 25

    如何在C ++中将指向一个类的指针复制到另一个类中?

  26. 26

    如何在c#Unity中从另一个脚本扩展类

  27. 27

    C ++ Qt如何工作?

  28. 28

    如何在 C++ 中创建一个简单的 GUI;没有 Qt、Gtk 或 Mondo?

  29. 29

    如何在WPF中将对象从一个窗口绑定到另一个窗口中的另一个控件?(C#)

热门标签

归档