Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: pousteVnik 20 Června 2010, 22:05:25

Název: QT vlastni widget
Přispěvatel: pousteVnik 20 Června 2010, 22:05:25
Ahoj,
mam jeden problém s tvorbou widgetu v QT.
Nejme tomu že chci vytvořit MyButton, pro jednoduchost se od rodice QPushButton lišit nebude (snad to nevadi).
mybutton.h
Kód: [Vybrat]
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QPushButton>

class MyButton : public QPushButton
{
Q_OBJECT

public:
        MyButton();
};
mybutton.cpp
Kód: [Vybrat]
#include "mybutton.h"
#include <QMouseEvent>

MyButton::MyButton()
        : QPushButton()
{
// nastaví výchozí text
setText("Dvojklikni sem!");
// nastaví výchozí velikost
setFixedSize(200, 50);

// signál hStretched() spustí slot vStretch()
}
Takto vytvořeny widget normalně funguje, pokud  ho vkladám ručně.
Pokud ale chci využít QT Designer, a přetáhnu do něj klasické tlačítko a pak ho povíším (promoted) na MyButton, nejde mi to přeložit, nevím v čem dělám chybu.
chyba překladu:
Kód: [Vybrat]
undefined reference to `MyButton::MyButton(QWidget*)'
:-1: error: collect2: ld returned 1 exit status
Projekt jsem vytvářel přez QT Creator, new GUI Aplicanion, jmeno jsem dal rovnice(chtel jsem vytovrit nejaky testovaci program :-)), poté jsem rucne vytvoril mybutton.h a .cpp
Prosím o radu.  Děkuji
Název: Re: QT vlastni widget
Přispěvatel: pajus 21 Června 2010, 21:29:21
vim ze podobny problem jsem resil taky.. kdyz jsem delal vlastni widget zdedeny od QWidget tak pokud jsem to udelal v kodu.. vse slo ok, jenze jsem ho potreboval pridat i pres creator kvuli rozmisteni atd... no a to byl porod porad to delalo co nemelo..

Mrknu do zdrojaku a podivam se jesttli najdu jak jsem to vyresil.. ale bylo to urcite promote + jeste neco k tomu
Název: Re: QT vlastni widget
Přispěvatel: pajus 21 Června 2010, 21:35:21
no v tom hlavickovem souboru je myslim ten
Kód: [Vybrat]
Q_OBJECT zbytecny, mozna i navic
a dal bych tam
Kód: [Vybrat]
MyButton(QWidget *parent = 0); //konstruktor
a ve zdrojaku zkus
Kód: [Vybrat]
MyButton::MyButton(QWidget *parent): QPushButton(parent){
//konstruktor
}

Ale je pravda ze ja jsem ten svuj widget pouzival trosku jinak, pres ukazatel a delal jsem si jakoby sve kreslici platno pro graf..
bohuzel .ui soubor jsem asi ztratil :(
Název: Re: QT vlastni widget
Přispěvatel: pajus 21 Června 2010, 21:44:23
Tak jsem to precejen nasel nekde v zaloze na serveru..

No pokud ti to bezproblemu jde promotnout na ten tvou tridu tak by to melo stacit.
Ja jsem mel problem ze mi to neslo promotnout a musel jsem tam nejak tu svou tridu pridat ale uz si nevzpomenu jak to bylo.)

edit: tak uz jsem to nasel :D
v promoted widgets vyberes ten rodic cili QPushButton napises nazev tvoji tridy = MyButton a cestu nazev hlavickoveho souboru. a zatrhnout global include at je ve vsech zdrojakach. tot vse
Název: Re: QT vlastni widget
Přispěvatel: pousteVnik 22 Června 2010, 12:35:12
Děkuji za odpověď už to funguje
jen jestě pro ty kdo používá Qt Creator je třeba dopsad aby se v projektu pouzili zdrojove kody (tzn. pridat je do *.pro)
Ještě jednou díky