मैंने क्यूटी-डिज़ाइनर के लिए एक पुश बटन डिज़ाइन किया है, जिसका नाम colorizeButton है, और इसे मेरे कोड में एक स्लॉट से जोड़ा है:

।एच :

class MainWindow : public QMainWindow
{
    Q_OBJECT

private:
    Draw *  draw;

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots :
    void colorize();

private:
    Ui::MainWindow *ui;
};

.cpp, मेरे QMainWindow का निर्माता:

draw = new Draw(parent);
setCentralWidget(draw);

ui->setupUi(this);
ui->colorizeButton->setAutoDefault(false);
connect(ui->colorizeButton, SIGNAL(clicked()), this, SLOT(colorize()));

.cpp, के बाद:

void MainWindow::colorize() {
    cout << "colorize()" << endl;
    QColor color = QColorDialog::getColor(Qt::black, draw);
    draw->Draw::setColor(color);
}

जब मैं इसे चलाता हूं और colorizeButton पर क्लिक करता हूं, तो "colorize ()" प्रिंट हो जाता है, लेकिन फिर प्रोग्राम क्रैश हो जाता है। क्या आप समझते हैं क्यों?

मैं उलझन में हूं क्योंकि, इससे पहले, मैंने एक क्यूएक्शन और इसी तरह के कनेक्शन का उपयोग किया था (यह "क्लिक" के बजाय सिर्फ "ट्रिगर ()" था) और यह काम किया: मैं QColorDialog के साथ बातचीत कर सकता था।

अग्रिम धन्यवाद! :डी

0
An' 14 अक्टूबर 2018, 17:10

1 उत्तर

सबसे बढ़िया उत्तर

कोड की यह पंक्ति अजीब लगती है:

draw->Draw::setColor(color);

मुझे लगता है कि ड्रा की बेस क्लास QWidget है और आप इसकी पृष्ठभूमि का रंग बदलना चाहते हैं। आप इसे इस तरह कर सकते हैं:

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

    draw = new QWidget(); // No need to set its parent because setCentralWidget sets it
}

void MainWindow::on_btnColorize_clicked()
{
    QColor color = QColorDialog::getColor(Qt::black, draw); // I do not know why you use draw as a parent for QColorDialog

    QPalette pal = palette();
    pal.setColor(QPalette::Background, color);
    draw->setAutoFillBackground(true);
    draw->setPalette(pal);
    this->setCentralWidget(draw);
}

ध्यान दें कि ऐसे मामले में ड्रा पूरे मेनविंडो को ले जाएगा।

0
chm 23 अक्टूबर 2018, 10:17