Portál AbcLinuxu, 13. července 2025 01:01


Dotaz: QLineEdit a setText a divný výstup

3.5.2007 22:55 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
QLineEdit a setText a divný výstup
Přečteno: 218×
Odpovědět | Admin
V Qt dělám jednoduchou kalkulačku. Problém mám s metodou setText, kterou nastavují co se má zobrazit na displeji, který je reprezentován pomocí QLineEdit. Na displeji se zobrazí kromě zadané číslice i divné znaky. Odpovídající kód vypadá takto:
QLineEdit       *display;
connect(but7,SIGNAL(clicked()),this,SLOT(clickButton7()));
void MainWidget::clickButton7(){
        insNumeral('7');
}
void MainWidget::insNumeral(char c){
//        printf ("%s\n",&c);
        QString s = display->text();
        display->setText((QString ) &c);
}
Takto se mi např zobrazí číslo 7 a 8:
7Pêû¿Ø¶
8Pêû¿ Pêû¿d/ø· X
Nevíte, kde můžu mít chybu?
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Luboš Doležel (Doli) avatar 3.5.2007 23:02 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: QLineEdit a setText a divný výstup
Odpovědět | | Sbalit | Link | Blokovat | Admin
QString s = display->text();
display->setText((QString ) &c);
Doporučuju se naučit zcela zásadní rozdíl mezi znakem a řetězcem znaků, který buď přehlížíte nebo neznáte. Získáním adresy proměnné typu char nedostáváte řetězec znaků, ale ukazatel na znak.

V tomto případě můžete udělat QString(c), protože QString má konstruktor, který char bere.

4.5.2007 09:49 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
Rozbalit Rozbalit vše Re: QLineEdit a setText a divný výstup
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prož QChar? Navíc to přetypování, jak už řekl Doli, je nešťastné.

Řešil bych to úplně jinak - což ovšem neznamená, že je to ideální řešení atd. - vynechal bych ten slot.

takže:

connect(but1, SIGNAL(clicked()), this, SLOT(clickButton()));
...
connect(but7, SIGNAL(clicked()), this, SLOT(clickButton()));
...

// univerzalni zpracovani stisknuteho tlacitka s cislem v textu
void MainWindow::clickButton()
{
    QString s(display->text()); // lepsi nez QString s = ... - vyhnes se inicializaci tmp promenne
// qt4
    QString t(qobject_cast<QPushButton*>(sender())->text());
// nebo qt3
    QString t((QPushButton*)sender()->text()); // nebo tak nejak.
    // mozna by slo i ciste sender()->text(). Tezko rict. Ale jsem liny to vyzkouset...
    display->setText(s + t);
    ...
}

prostě tan nějak. Ať nekóduješ miliardy slotů.
Kuolema Kaikille (Paitsi Meille).
4.5.2007 14:49 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: QLineEdit a setText a divný výstup
Tak už jsem to vyřešil:
void MainWidget::insNumeral(QChar c){
        QString s(display->text());
        QString r(c);
        display->setText(s+r);
}
Díky za rady.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.