Осваиваю 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();
}
Примечание:
Всётаки это был глюк винды. Через некоторое время после перезагрузки винды всё стало работать.