Для удобного отображения растровой карты решил написать свой наследник от QWidget но почему-то при добавлении этот виджет не отображается
Описания классов
C++ (Qt)
class Region : public QWidget
{
Q_OBJECT
public:
explicit Region(QRect boundingRect, QString& name, QString& maskFilePath, QWidget *parent = 0);
signals:
void clicked();
public slots:
inline void setCaptionStyleSheet(QString style) {regionCaption.setStyleSheet(style);}
void setRegionState(int state);
void adjustCaptionSize();
void setCatpionFontSize(int pointSize);
void regionClicked();
private:
QWidget regionBg;
QPushButton regionCaption;
int regionState;
};
class RegionMap : public QWidget
{
Q_OBJECT
public:
explicit RegionMap(QString mapConfigPath, QWidget *parent = 0);
~RegionMap();
signals:
void regionClicked(int index);
public slots:
int loadFromFile(QString fileName);
private slots:
void regionClick();
private:
static const int MAX_REGION_COUNT = 100;
Region *regions[MAX_REGION_COUNT];
int regionCount;
};
...
RegionMap *map;
Конструктор региона
C++ (Qt)
Region::Region(QRect boundingRect, QString& name, QString& maskFilePath, QWidget *parent) : QWidget(parent)
{
this->regionBg.setGeometry(boundingRect);
regionBg.setMask(QPixmap(maskFilePath));
setRegionState(0);
regionCaption.setText(name);
regionCaption.setStyleSheet("QPushButton {font: bold; color: #2F358C; background: transparent;} QPushButton:pressed {padding-left: 2px;padding-top: 2px;color: #FABA77;}");
setCatpionFontSize(18);
connect(®ionCaption, SIGNAL(clicked()), this, SLOT(regionClicked()));
}
Конструктор карты
C++ (Qt)
RegionMap::RegionMap(QString mapConfigPath, QWidget *parent) : QWidget(parent)
{
loadFromFile(mapConfigPath);
}
int RegionMap::loadFromFile(QString fileName)
{
QSettings settings(fileName,QSettings::IniFormat);
settings.setIniCodec(INI_CODEC_NAME);
QString filename, name;
int x, y, w,h;
regionCount = settings.value("count",0 ).toInt();
if (regionCount>0)
{
for (int i = 1; i<=regionCount; i++)
{
if (i>MAX_REGION_COUNT) return -2;
name = settings.value(QString("obj%1/name").arg(i), "").toString();
filename = settings.value(QString("obj%1/filename").arg(i), "").toString();
x = settings.value(QString("obj%1/x").arg(i), 0).toInt();
y = settings.value(QString("obj%1/y").arg(i), 0).toInt();
w = settings.value(QString("obj%1/w").arg(i), 0).toInt();
h = settings.value(QString("obj%1/h").arg(i), 0).toInt();
regions[i-1] = new Region(QRect(x, y, w, h), name, filename, this);
connect(regions[i-1], SIGNAL(clicked()), this, SLOT(regionClick()));
}
return 0;
}
else
return -1;
}
Создаю карту
C++ (Qt)
map = new RegionMap("map.conf", ui->MonTab);
map->setGeometry(10, 10, 1500, 900);
MonTab - вкладка QTabWidget
родителей проверил, все верно присваивается но виджеты карты так и не появляются. В дебагере смотре map.isVisible == false show() не помогает.
Пробовал добавить так-же обычный QPushButton - он сразу появился. Подскажите в чем может быть проблема, у меня гипотез больше не осталось.