PDA

View Full Version : Problem accesing to the widgets inside a UI.



jano_alex_es
22nd December 2010, 12:02
Hi,

in my application the ui is not able to reach the buttons it has inside, and I don't understand why. I've done some similar applications and I never had a problem...

I'm just adding two button to the ui file, using the Qt Creator, but the message "class xxx has no member called" is shown. I'm pretty sure it's a stupid mistake but I'm not able to figure out what can be happening. I've tried recompiling few times, delenting manually the files (tmp, moc...), deleting the ui file and creating again from the start, removing it from the project and adding it again...

UI file


<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CanicasClass</class>
<widget class="QMainWindow" name="CanicasClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>270</width>
<height>202</height>
</rect>
</property>
<property name="windowTitle">
<string>Canicas</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QFrame" name="m_wdgChoseLvl">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QScrollArea" name="m_scrollArea">
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>226</width>
<height>140</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="m_btnLevel1">
<property name="text">
<string>Rising Star</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_btnLevel2">
<property name="text">
<string>Level 2</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>



.h code

#ifndef CANICAS_H
#define CANICAS_H

#include <QtGui/QMainWindow>
#include "ui_canicas.h"

/*namespace Ui {
class Canicas;
}*/

class Canicas : public QMainWindow
{
Q_OBJECT

public:
explicit Canicas(QWidget *parent = 0);
~Canicas();

private:
Ui::CanicasClass ui;

void setConnections();
};

#endif // CANICAS_H


.cpp


#include "canicas.h"
#include "ui_canicas.h"
#include <QPushButton>

Canicas::Canicas(QWidget *parent) :
QMainWindow(parent)
{
ui.setupUi(this);

setConnections();
}

Canicas::~Canicas()
{
}

void Canicas::setConnections()
{
//ui.m_btnLevel1->scroll(0, 0); //Don't display an error
connect(ui.m_btnLvl1, SIGNAL(clicked()),
this, SLOT(level1()));
/*QObject::connect(ui.m_btnLvl2, SIGNAL(clicked()),
this, SLOT(level2()));*/
}

HelderC
22nd December 2010, 12:25
Did you try remove the explicit keyword at header file?

And I think this part:



private:
Ui::CanicasClass ui;

Would be:


private:
Ui::Canicas ui;

Lykurg
22nd December 2010, 15:25
You try to access via
ui.m_btnLvl1so there must be a button called "m_btnLvl1", but in the ui file you name it "m_btnLevel1". That's the point.