在Qt中将数据从一种形式传输到另一种形式?

时间:2017-11-14 19:33:41

标签: c++ qt paintevent

出现了这样的问题。我有一个主要和辅助形式。对于第二种形式,我采用两个值:索引和颜色。我转移到主表格。我得到了" setParametr"中的值。方法。但是我无法在" paintEvent"方法。 QDebug显示方法" setParametr"得到了价值观。当我检查" on_pushButton_clicked()"中的值时值为0.可能是什么问题。刚开始研究Qt

dialog.h

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    void setcolor(int);
    int getcolor();
    void setindex(int);
    int getindex();
private slots:
    void ColorIndex();

    void on_pushButton_clicked();

private:
    Ui::Dialog *ui;
    int squareColor;
    int Index;

};

dialog.cpp

#include "ui_dialog.h"
#include "dialog.h"
#include "mainwindow.h"
#include "QDebug"
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    //connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(ColorIndex()));
}

Dialog::~Dialog()
{
    delete ui;
}
void Dialog::setcolor(int color)
{
    squareColor = color;
}
int Dialog::getcolor()
{
    return squareColor;
}
void Dialog::setindex(int index)
{
    Index = index;
}
int Dialog::getindex()
{
    return Index;
}
void Dialog::on_pushButton_clicked()
{
    MainWindow *main = new MainWindow();
    if(ui->radioButton->isChecked()){
        setcolor(1);
      }
    if(ui->radioButton_2->isChecked()){
        setcolor(2);
      }
    if(ui->radioButton_3->isChecked()){
        setcolor(3);
      }
    if(ui->comboBox->currentIndex()==0)
    {
        setindex(1);
    }
    if(ui->comboBox->currentIndex()==1)
    {
        setindex(2);
    }
    if(ui->comboBox->currentIndex()==2)
    {
        setindex(3);
    }
    if(ui->comboBox->currentIndex()==3)
    {
        setindex(4);
    }
    qDebug() << QString::number(getcolor());
    qDebug() << QString::number(getindex());
    main->SetParametr(getindex(),getcolor());

}

mainwindow.h

    #include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QPainterPath>
#include <QColor>
#include <QColorDialog>
#include <QPushButton>
#include <QMainWindow>
#include "dialog.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void setColor(int);
    int getColor();
    void setIndex(int);
    int getIndex();

private:
    Dialog *dial = new Dialog();
    int fIndex;
    int fColor;
private slots:
    void on_actionMy_Dialog_triggered();
    void paintEvent(QPaintEvent *event);
    void on_pushButton_clicked();

signals:
void SetParametr(int index, int color);
private:
    Ui::MainWindow *ui;
    void onInit();


};

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "dialog.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    fColor = 0;
    fIndex =0;
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::SetParametr(int index, int color)
{
    fIndex = index;
    fColor = color;
    qDebug() << QString::number(fColor) + "s";
    qDebug() << QString::number(fIndex);
}

/*void MainWindow::setColor(int _color)
{
    fColor = _color;
}
int MainWindow::getColor()
{
    return fColor;
}
void MainWindow::setIndex(int _index)
{
    fIndex = _index;
}
int MainWindow::getIndex()
{
    return fIndex;
}
*/
void MainWindow::paintEvent(QPaintEvent *event)
{
    QColor  red1;
    if(fColor==1){
     red1 = Qt::red;
    }
    if(fColor == 2){
     red1 = Qt::blue;
    }
    if(fColor == 3){
     red1 = Qt::green;
    }
    int index1;
    if(fIndex == 0)
    {
        index1 = 0;
    }
    if(fIndex == 1)
    {
        index1 = 1;
    }
    if(fIndex == 2)
    {
        index1 = 2;
    }
    if(fIndex == 3)
    {
        index1 = 3;
    }
    Q_UNUSED(event);
    QPainter painter(this);
    if(index1 == 0)
      {
        painter.setBrush(QBrush(red1, Qt::SolidPattern));
        painter.drawEllipse(100, 50, 150, 150);
      }
    if(index1 == 1)
    {
        painter.setBrush(QBrush(red1, Qt::SolidPattern));
        painter.drawRect(50, 50, 250, 150);
    }
    if(index1 == 2)
    {
        painter.setBrush(QBrush(red1, Qt::SolidPattern));
        QPolygon polygon;
        polygon<<QPoint(175,50)<<QPoint(50,200)<<QPoint(300,200);
        painter.drawPolygon(polygon);
    }
    if(index1 == 3)
    {
        painter.setBrush(QBrush(red1, Qt::SolidPattern));
        painter.drawRect(100, 50, 150, 150);
    }
}
void MainWindow::on_actionMy_Dialog_triggered()
{
    dial->show();
}
void MainWindow::on_pushButton_clicked()
{

        qDebug() << QString::number(fColor);
        qDebug() << QString::number(fIndex);
}

0 个答案:

没有答案