Косяков здесь 2. Первый это попытка Qt удалить самой указатели на дочернией QObject'ы, ей это успешно удается, поэтому при покидании основного блока программы ОС пытается вызвать деструктор еще раз, ибо Qtшные классы создавались в стеке, а не через new. Второй косяк в том, что ты меняешь флаг окна на Tool, похоже Qt считает, что для этого окна родителем является рабочий стол и выход не происходит по quitOnLastWindowClosed (т.е. когда последнее окно приложения закрывается). Эта проблема где-то обсуждалась уже, но решение я не помню. А так вот рабочая версия:
Код | #include <QLabel> #include <QApplication> #include <QPushButton> #include <QSpinBox> #include <QWidget> #include <QSlider> #include <QHBoxLayout> #include <QVBoxLayout> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.setWindowTitle("Age"); //window.setWindowFlags(Qt::Tool); QLabel *label = new QLabel("Change your age: "); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit())); QSpinBox *spinbox = new QSpinBox; spinbox->setRange(0, 130); QSlider *slider = new QSlider(Qt::Horizontal); slider->setRange(0, 130); QObject::connect(spinbox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); QObject::connect(slider, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int))); spinbox->setValue(35); QHBoxLayout *spinbox_slider = new QHBoxLayout; spinbox_slider->addWidget(spinbox); spinbox_slider->addWidget(slider); QVBoxLayout *main = new QVBoxLayout; main->addWidget(label); main->addLayout(spinbox_slider); main->addWidget(button); window.setLayout(main); window.show(); return app.exec(); }
|
|