Byla vydána verze 1.98.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Byla vydána nová verze 7.1 (YouTube) svobodného open source redakčního systému WordPress. Kódové jméno Mary Lou bylo vybráno na počest americké jazzové klavíristky Mary Lou Williams (YouTube).
Bun (Wikipedie), tj. běhové prostředí (runtime) a toolkit pro JavaScript a TypeScript, alternativa k Node.js a Deno, byl vydán ve verzi 1.4. Představení novinek také na YouTube. Bun byl přepsán z programovacího jazyka Zig do Rustu. Pomocí Claude Fable 5.
Vývojáři KDE na Mastodonu oznámili vydání balíku aplikací KDE Gear 26.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.
Společnost PINE64 kvůli nedostatku a vysokým cenám DRAM a eMMC dočasně pozastavuje výrobu linuxových zařízení. Výroba zařízení jako PineTime, PineVoice a Pinecil pokračuje.
Společnost Stripe se dohodla na akvizici společnosti OpenRouter. Za 7,5 miliardy dolarů.
Byla vydána nová verze 1.27 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.
V pátek 28. srpna se v Praze uskuteční již osmý Mobile Linux Hackday. Jako obvykle se potkáme v pražské pobočce SUSE v Karlíně na Křižíkově, takže kromě mobilního Linuxu je to tentokrát i příležitost přijít se podívat na nově zrekonstruované kanceláře. Začínáme v 10:00, ale dorazit můžete samozřejmě kdykoliv v průběhu dne. Setkáním vás provede Petr Hodina, vývojář GPU ovladačů v Mesa 3D a jeden z hlavních lidí české komunity kolem mobilního … více »
Představen byl Raspberry Pi Compute Module 5 Programming Jig. Jedná se o zařízení umožňující připravit Compute Module 5 do plně funkčního stavu bez nutnosti použití dalších vstupně / výstupních desek. Podporuje automatizaci pomocí nástroje rpi-sb-provisioner. Podrobnosti v dokumentaci.
Hackeři ve Francii ukradli data více než půl milionu daňových poplatníků. Je to jeden z největších hackerských útoků v dějinách země. O útoku z konce června informovala až teď daňová správa. Teprve od pondělí dotčeným občanům zasílá e-maily s instrukcemi, jak postupovat dál. Hackeři se sice nedostanou k penězům dotyčných, hrozí ale věrohodné podvody. Hackeři získali třeba celá jména, údaje o rodinných příslušnících nebo také údaje o
… více »
using namespace std;
class ClassPrihlasit : public QObject
{
Q_OBJECT
public slots:
void cppSlot() { cout << "Called the C++ slot with message:"; }
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget();
//sirka výska
window->resize(200, 110);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("88.86.113.81");
db.setDatabaseName("chat");
db.setUserName("chat");
db.setPassword("********");
db.open();
QSqlQuery sql;
sql.prepare( "SELECT id FROM uzivatele where email='info@efadesigner.cz' and heslo=sha1('********')" );
sql.exec();
QSqlRecord rec = sql.record();
int pocet = rec.count();
cout << pocet;
QLabel *email = new QLabel(QString("Email: "), window );
email->setObjectName( "email" );
email->setGeometry( QRect(20, 10, 83, 21) );
QLineEdit *email_input = new QLineEdit(QString(""), window );
email_input->setObjectName( "textEdit" );
email_input->setGeometry( QRect(60, 10,100, 21) );
QLabel *heslo = new QLabel(QString("Heslo: "), window );
heslo->setObjectName( "heslo" );
heslo->setGeometry( QRect(20, 40, 83, 21) );
QLineEdit *heslo_input = new QLineEdit(QString(""), window );
heslo_input->setObjectName( "textEdit" );
heslo_input->setGeometry( QRect(60, 40,100, 21) );
heslo_input->setEchoMode(QLineEdit::Password);
QPushButton *prihlasit = new QPushButton(QString("Prihlasit"), window);
//ODSAZENI OD LEVA , VRCHU, SIRKA VYSKA
prihlasit->setGeometry(120, 70, 80, 30);
//události
ClassPrihlasit test;
QObject::connect(prihlasit, SIGNAL(clicked()),&test, SLOT(cppSlot()));
window->show();
return app.exec();
}
skoro dole volam udalost cppSlot() kliknutim na tlacitko prihlasit ale hlásí mě to chybu
(.text.startup+0x5ab):-1: error: undefined reference to `vtable for ClassPrihlasit'
pritom tu class mam definovanou nahoře, už netuším co dělám špatně a za jakou koliv radu co povede k řešení budu Rád.
Řešení dotazu:
moc na příslušný hlavičkový soubor, což se obvykle nedělá, protože je to pracné a snadno se to zapomene.
Mnohem lepší je moc soubory generovat automaticky. qmake to pokud vím dělá samo bez dalšího zásahu, jak to udělat pro obyčejný makefile je popsáno přímo v dokumentaci Qt. Pro CMake je možné použít buď qt4_automoc() na všechny zdrojáky a moc se vygeneruje pro všechny, pro které je to potřeba, nebo lze použít qt4_wrap_cpp() pro vygenerování moc pro konkrétní soubor.
pak jsem dal opet ctrl+r pro kompilaci a hups byli tito chyby v moc souboru main.moc
a na google jsem si stim nejak moc neporadil pokud by nekdo mel radu dekuji
void GrafikaPrihlaseni(){
QWidget *window = new QWidget();
//sirka výska
window->resize(200, 110);
QLabel *email = new QLabel(QString("Email: "), window );
email->setObjectName( "email" );
email->setGeometry( QRect(20, 10, 83, 21) );
QLineEdit *email_input = new QLineEdit(QString(""), window );
email_input->setObjectName( "textEdit" );
email_input->setGeometry( QRect(60, 10,100, 21) );
QLabel *heslo = new QLabel(QString("Heslo: "), window );
heslo->setObjectName( "heslo" );
heslo->setGeometry( QRect(20, 40, 83, 21) );
QLineEdit *heslo_input = new QLineEdit(QString(""), window );
heslo_input->setObjectName( "textEdit" );
heslo_input->setGeometry( QRect(60, 40,100, 21) );
heslo_input->setEchoMode(QLineEdit::Password);
QPushButton *prihlasit = new QPushButton(QString("Prihlasit"), window);
//ODSAZENI OD LEVA , VRCHU, SIRKA VYSKA
prihlasit->setGeometry(120, 70, 80, 30);
//události
prihlaseni prihlasit_click;
QWidget::connect(prihlasit, SIGNAL(clicked()),&prihlasit_click, SLOT(UserPrihlaseni()));
window->show();
}
kterou si samozrejme radne pripojim do projektu (je v samostatnem souboru) a prez hlavickove soubory ji pripojim a z main zavolam , grafika se zobrazi, ale kdyz kliknu na tlacitko tak to nic nevykona ani chybu to nezobrazi ale kdyz to dam cele do mainu tak to projde v pohode
hellou word jsem rozebral snad uz vsechno co jsem nasel
using namespace std;. Motat si do Qt STL je celkem zbytečné. Na ladicí výpisy máme qDebug().
A doporučuju použvat konvence pojmenovávání jako má Qt. Je to pak krásně jednotné a přehledné, i když to není to co máš nejraději, je ta jednotnost lepší než to motat.
Také je lepší zdědit si třídu QWidget a v konstruktoru vyrobit všechny widgety co tam chceš. Pak místo QObject::connect() ti stačí prostě jen connect(widget, signál, this, SLOT(privátní_metoda)).
A teď k té chybě:
Pokud vyrobíš objekt prihlasit_click jen takle bez new, tak se při ukončení metody, kde byl vytvořen, zlikviduje, takže později při zavolání slotu už ten objekt neexistuje. Buď ho vyrob pomocí new a měj u něj konstruktor s parametrem QObject *parent, který předáš při inicializaci do QObject, aby se Qt postaralo automaticky o uklizení objektu při likvidaci rodiče, nebo si ho dovnitř předej odjinud.
Prihlasit *prihlasitClick = new Prihlasit(window); QWidget::connect(prihlasit, SIGNAL(clicked()), prihlasitClick, SLOT(UserPrihlaseni()));Chybu to nehlásí, protože při likvidaci objektu
prihlasit_click se zlikvidují i propojení signálů, takže v okamžiku, kdy klikneš na to tlačíko už není nic napojeno.
V main() to funguje jen díky tomu, že instance objektu existuje i v době, kdy voláš app.exec().
Takže to co jsi udělal by mělo vypadat takto:
class WidgetPrihlaseni : QWidget {
private:
QLineEdit *m_email;
QLineEdit *m_heslo;
public:
WidgetPrihlaseni(QWidget *parent = NULL) : QWidget(parent)
{
//sirka výska
// window->resize(200, 110); -- neni treba, qt to spocita samo
QGridLayout layout = new QGridLayout(this);
QLabel *email_label = new QLabel(QString("Email:"));
layout->addWidget(email_label, 1, 1);
m_email = new QLineEdit(QString(""));
layout->addWidget(m_email, 1, 2);
QLabel *heslo = new QLabel(QString("Heslo:"));
layout->addWidget(heslo, 2, 1);
m_heslo = new QLineEdit();
m_heslo->setEchoMode(QLineEdit::Password);
layout->addWidget(m_heslo, 2, 2);
QPushButton *prihlasit = new QPushButton(QString("Prihlasit"));
layout->addWidget(prihlasit, 3, 2);
//události
connect(prihlasit, SIGNAL(clicked()), login, SLOT(UserPrihlaseni()));
// this->show(); -- neni treba, vola se to samo
// rekurzivne, takze to patri jen jednou do main()
}
public slots:
void login()
{
// Tady nebudeš dělat samotné přihlášení, ale jen
// přepošleš data jinému objektu někde v aplikaci,
// který se stará o session.
qDebug() << "email:" << m_email->text();
qDebug() << "heslo:" << (m_heslo->text() == "" ? "empty" : "*****");
emit submited(m_email->text(), m_heslo->text());
}
signals:
void submited(const QString & email, const QString & password);
};
QWidget *window= new WidgetPrihlaseni;
window->show();
a uz me to jelo ok a pokud mohu jest jednu otazku jak pak vypnu to oknu?
krom toho ze bych to main.cpp napsal window->close() ale napr z nejake vnejsi funkce zda k tomu jde pristoupit do toho main a tu promenou window proste vypnotu cvy vyvolat a vypnout jinde?
Ještě je dobrým zvykem těla metod přesunout do cpp souboru a v hlavičkovém mít jen deklarace. Takle dohromady jsem to sesypal kvůli čitelnosti v diskusi.
to okno zlikviduješ stejně jako jakýkoliv jiný widget – doporučuju zavolat slot (metodu) deleteLater(). Případně si můžeš hrát s hide() a show(). Odkud to budeš volat záleží na kontextu a na logice aplikace.
Na modální dialogy je ale lepší použít třídu QDialog a z ní zděděné.
Použití pak může vypadat takto:
LoginDialog ld;
if (ld.exec() == QDialog::Accepted) {
qDebug() << ld.email() << ld.password();
}
Modifikaci kódu z mého minulého příspěvku určitě zvládneš, vlastně jen změníš rodičovskou třídu z QWidget na QDialog a doladíš detaily.
window->close();a bylo vystarano ale to nemohu udelat v najake funkci kdyz je to ve tride uplne nekde jinde
a destruktor me na to nefunguje
jinak dialog je fakt lepsi :)
takze me jeste asi chvilku potrva nez to cele pochopim takze dekuji za schovyvavost.
#include "main.moc"ted me to hlasi pro Kontakt List v mainwindow a uz sem skousel davat include "mainwindow.moc" i kontaktlist.moc (podle nazvu cpp) snad vsude kde se dalo na konce souboru postupne a nic nepomohlo, vsude radej pripojte tam ten soubor ale jak ho tam amm pripojit kdyz to stejne na to nereaguje?
#include "main.moc"ted me to hlasi pro Kontakt List v mainwindow a uz sem skousel davat include "mainwindow.moc" i kontaktlist.moc (podle nazvu cpp) snad vsude kde se dalo na konce souboru postupne a nic nepomohlo, vsude radej pripojte tam ten soubor ale jak ho tam amm pripojit kdyz to stejne na to nereaguje? jeste doplnuji Qt creator je tvurce
Tiskni
Sdílej: