Portál AbcLinuxu, 13. července 2025 01:01
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/ø· XNevíte, kde můžu mít chybu?
QString s = display->text();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
display->setText((QString ) &c);
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.
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ů.
void MainWidget::insNumeral(QChar c){ QString s(display->text()); QString r(c); display->setText(s+r); }Díky za rady.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.