Qt приложение в винде выдаёт ошибку runtime

программирование Linux windows C++ qt

Осваиваю Qt, не совсем ещё врубился во всё.

Почему например если в 1 случае выдаёт ошибку
------------------------------------------------------
file.h //заголовок
...
private:
QSlider* slider1;
QLabel* lbl;
...
file.cpp
//конструктор {
...
slider1 = new QSlider(Qt::Horizontal);
lbl = new QLabel("1");
...
}
-----------------------------------------------------------

а в другом случае, когда сразу в конструкторе без объявления в .h всё работает?

file.cpp
//конструктор {
...
QSlider* slider1 = new QSlider(Qt::Horizontal);
QLabel* lbl = new QLabel("1");
...
}

сама ошибка:
this application has requested the Runtime to terminate it an unusual way. Please contact the application's support team for more information

Другие элементы, например QPushButton создаются нормально первым способом.
Проверялось на XP, может это конечно её баг, но скорее всего моё не знание вопроса.
Объясните пожалуйста кому не трудно.

Примечание:
ну вот полный код, частично из примеров по книге, слайдер ничего не делает, кроме как передаёт значение лейблу. Там ещё пара примеров смешано, не буду вырезать уж.

// buttons.h **********************************************************
#ifndef BUTTONS_H
#define BUTTONS_H

#include <QtGui>

class QRadioButton;
class QCheckBox;
class QLabel;
class QSlider;

class Buttons : public QGroupBox
{
Q_OBJECT
public:
explicit Buttons(QWidget *parent = 0);


private:
QRadioButton* rb1;//red
QRadioButton* rb2;//green
QRadioButton* rb3;//blue
QCheckBox* ch1;

QSlider* slider1;
QLabel* lbl;

public slots:
void slotButtonClicked();
};

#endif // BUTTONS_H




// buttons.cpp**********************************************************************************************
#include "buttons.h"

Buttons::Buttons(QWidget *parent) :
QGroupBox("RadioButtons",parent)
{
setWindowTitle("тест buttons и slider");
resize(200, 200);
setCheckable(true);
setChecked(true);

//buttons
rb1 = new QRadioButton("&red");
rb2 = new QRadioButton("&green");
rb3 = new QRadioButton("&blue");

rb1->setChecked(true);

connect(rb1,SIGNAL(clicked()),SLOT(slotButtonClicked()));
connect(rb2,SIGNAL(clicked()),SLOT(slotButtonClicked()));
connect(rb3,SIGNAL(clicked()),SLOT(slotButtonClicked()));

ch1 = new QCheckBox("&Light");
ch1->setChecked(true);

connect(ch1,SIGNAL(clicked()),SLOT(slotButtonClicked()));

//slider
slider1 = new QSlider(Qt::Horizontal);
lbl = new QLabel("200");

slider1->setRange(0,500);
slider1->setTickInterval(50);
slider1->setTickPosition(QSlider::TicksBelow);
slider1->setPageStep(50);
slider1->setValue(200);

connect(slider1, SIGNAL(valueChanged(int)),
lbl, SLOT(setNum(int)));
//Layout

QVBoxLayout* VLayout1 = new QVBoxLayout;
QVBoxLayout* VLayout2 = new QVBoxLayout;

QHBoxLayout* HLayout = new QHBoxLayout;
HLayout->addWidget(slider1);
HLayout->addWidget(lbl);

VLayout1->addWidget(rb1);
VLayout1->addWidget(rb2);
VLayout1->addWidget(rb3);
VLayout1->addWidget(ch1);

VLayout2->addWidget(slider1);
VLayout2->addWidget(lbl);

HLayout->addLayout(VLayout1);
HLayout->addLayout(VLayout2);

setLayout(HLayout);

slotButtonClicked();
}

void Buttons::slotButtonClicked(){
QPalette pal = palette();

int nLight = ch1->isChecked() ? 150 : 80;

if(rb1->isChecked()){
pal.setColor(backgroundRole(), QColor(Qt::red).light(nLight));
}
else if (rb2->isChecked()){
pal.setColor(backgroundRole(),QColor(Qt::green).light(nLight));
}
else if (rb3->isChecked()){
pal.setColor(backgroundRole(),QColor(Qt::blue).light(nLight));
}

setPalette(pal);
}




// main.cpp ***********************************************************************
#include <QtGui/QApplication>
#include "progress.h"
#include "buttons.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QTextCodec *codec = QTextCodec::codecForName("CP1251");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec);

Buttons butons;

butons.show();

return a.exec();
}

Примечание:
Всётаки это был глюк винды. Через некоторое время после перезагрузки винды всё стало работать.
Ответы:
ошибка не здесь, ты где-то используешь эти указатели дальше?


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.