Сбой программы при вызове QColorDialog в функцию слота, связанную с виджетом, определенным благодаря qt-designer - PullRequest
0 голосов
/ 14 октября 2018

Я спроектировал кнопку благодаря Qt-конструктору с именем colorizeButton и подключил ее к слоту в моем коде:

.h:

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 ()» распечатывается, но затем программа падает,Вы понимаете, почему?

Я в замешательстве, потому что до этого я использовал QAction и аналогичное соединение (это было просто «triggered ()» вместо «clicked»), и это работало: я мог взаимодействовать сQColorDialog.

Заранее спасибо!: D

1 Ответ

0 голосов
/ 23 октября 2018

Эта строка кода выглядит странно:

draw->Draw::setColor(color);

Я полагаю, что базовый класс Draw - это 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);
}

Обратите внимание, что в этом случае отрисовка займет все основное окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...