Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: QT vlastni widget  (Přečteno 2160 krát)

pousteVnik

  • Aktivní člen
  • *
  • Příspěvků: 182
QT vlastni widget
« kdy: 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

pajus

  • Návštěvník
  • Příspěvků: 65
  • DELL vostro 1320
Re: QT vlastni widget
« Odpověď #1 kdy: 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

pajus

  • Návštěvník
  • Příspěvků: 65
  • DELL vostro 1320
Re: QT vlastni widget
« Odpověď #2 kdy: 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 :(

pajus

  • Návštěvník
  • Příspěvků: 65
  • DELL vostro 1320
Re: QT vlastni widget
« Odpověď #3 kdy: 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
« Poslední změna: 21 Června 2010, 21:46:21 od pajus »

pousteVnik

  • Aktivní člen
  • *
  • Příspěvků: 182
Re: QT vlastni widget
« Odpověď #4 kdy: 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

 

Provoz zaštiťuje spolek OpenAlt.