Vývojáři svobodného 3D softwaru Blender představili (𝕏, Mastodon, Bluesky) nejnovějšího firemního sponzora Blenderu. Je ním společnost Anthropic stojící za AI Claude a úroveň sponzoringu je Patron, tj. minimálně 240 tisíc eur ročně. Anthropic oznámil sponzorství v tiskové zprávě Claude for Creative Work.
VNC server wayvnc pro Wayland kompozitory postavené nad wlroots - ne GNOME, KDE nebo Weston - byl vydán ve verzi 0.10.0. Vydána byla také verze 1.0.0 související knihovny neatvnc.
Bylo oznámeno vydání Fedora Linuxu 44. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora IoT pro internet věcí, Fedora Cloud pro cloudové nasazení a Fedora CoreOS pro ty, kteří preferují neměnné systémy. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách
… více »David Malcolm se na blogu vývojářů Red Hatu rozepsal o vybraných novinkách v GCC 16, jež by mělo vyjít v nejbližších dnech. Vypíchnuta jsou vylepšení čitelnosti chybových zpráv v C++, aktualizovaný SARIF (Static Analysis Results Interchange Format) výstup a nová volba experimental-html v HTML výstupu.
Byla vydána verze R14.1.6 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.
Jon Seager z Canonicalu včera na Ubuntu Community Hubu popsal budoucnost AI v Ubuntu. Dnes upřesnil: AI nástroje budou k dispozici jako Snap balíčky, vždy je může uživatel odinstalovat. Ve výchozím nastavení budou všechny AI nástroje používat lokální AI modely.
Nový ovladač Steam Controller jde do prodeje 4. května. Cena je 99 eur.
Greg Kroah-Hartman začal používat AI asistenta pojmenovaného gkh_clanker_t1000. V commitech se objevuje "Assisted-by: gkh_clanker_t1000". Na social.kernel.org publikoval jeho fotografii. Jedná se o Framework Desktop s AMD Ryzen AI Max a lokální LLM.
Ubuntu 26.10 bude Stonking Stingray (úžasný rejnok).
Webový prohlížeč Dillo (Wikipedie) byl vydán ve verzi 3.3.0. S experimentální podporou FLTK 1.4. S příkazem dilloc pro ovládání prohlížeče z příkazové řádky. Vývoj prohlížeče se přesunul z GitHubu na vlastní doménu dillo-browser.org (Git).
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: