Portál AbcLinuxu, 17. listopadu 2025 17:26
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.