Ubuntu 26.04 patrně bude ve výchozím nastavení zobrazovat hvězdičky při zadávání hesla příkazu sudo, změna vychází z nové verze sudo-rs. Ta sice zlepší použitelnost systému pro nové uživatele, na které mohlo 'tiché sudo' působit dojmem, že systém 'zamrzl' a nijak nereaguje na stisky kláves, na druhou stranu se jedná o možnou bezpečnostní slabinu, neboť zobrazování hvězdiček v terminálu odhaluje délku hesla. Původní chování příkazu sudo
… více »Projekt systemd schválil kontroverzní pull request, který do JSON záznamů uživatelů přidává nové pole 'birthDate', datum narození, tedy údaj vyžadovaný zákony o ověřování věku v Kalifornii, Coloradu a Brazílii. Jiný pull request, který tuto změnu napravoval, byl správcem projektu Lennartem Poetteringem zamítnut s následujícím zdůvodněním:
… více »Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 163 (pdf).
Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního
… více »Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.
Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.
haveData(QString), ten vyvolam ve chvili, kdy mam pro potomka nejaka data. V potomkovi mam pak slot který má daný signál zachytit a zpracovat.
connect(parent, SIGNAL(haveData(QString)), this, SLOT(insertInput(QString)));
Jenže ten na signál nereaguje. V konstruktoru dítěte mám na předka odkaz:
explicit mcmd(QMainWindow *parent);
Nenapadá mne už co dělám špatně
, nicméně je divné, že QTCreator všechny signály při zápisu předbízí/doplňujě, ale v tomto případě ne.
Zběžně to vypadá, že parent je QMainWindow, který nezná signál haveData(QString) - QMainWindow nahradit třídou, která obsahuje ten signál (a dědí z QMainWindow)
Signál je vyslán, ale cmd jej nezachytí...
zkusím uvést příklad...
//*********************
(MainWindow.cpp)
//*********************
...
//Konstruktor
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
mycommandline(0)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(startCommandline()));
connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(executeCommand()));
}
...
void MainWindow::startCommandline()
{
myiface = new minterface();
mycommandline = new mcmd(myiface);
mycommandline->start(); // spustíme vlákno
}
void MainWindow::executeCommand()
{
myiface->emitSignal("ping 192.168.1.1"); //nefunguje - vola funkci emit v myiface
emit myiface->haveData("ping 192.168.1.1"); //taky ne
}
//*********************
(mcmd.cpp)
//*********************
...
mcmd::mcmd(minterface *parent)
{
commandline = new QProcess();
connect(parent, SIGNAL(haveData(QString)), this, SLOT(insertInput(QString)));
}
...
void mcmd::run()
{
commandline->start("cmd");
commandline->waitForReadyRead();
}
void mcmd::insertInput(QString m_input) //sem signal nikdy nedorazi
{
input = m_input.toLatin1();
commandline->write(input);
commandline->write("\n");
commandline->waitForReadyRead();
}
void mcmd::getOutput() //odeslani odtud do predka funguje bez problemu...
{
result = commandline->readAll();
emit sendingData(QString(result));
}
insertInput(QString m_input) jsem zapoměl definovat jako slot
. Už to něco dělá
. Akorát mi teď zamrzává GUI, což znamená, že ještě něco dělám špatně. Ale s tím už se snad nějak porvu...
Pokud je aplikace jednovláknová, tak pravděpodobně GUI čeká na zbytek aplikace. Sloty/signály samy nezaručí to, že když se vyšlou, tak program běží paralelně na dvou místech. Pokud je vyhozen signál, tak aplikace hledá kde se má přijmout - spustí se kód slotu a až po jeho doběhnutí se zase vrátí na místo odkud byl signál vyslán.
.
.
Pokud by jste k tomu měli ještě nějaké rady či nápady určitě za ně budu rád. Ty odkazy ještě určitě nastuduju.
Zmatené není v podstatě nic, jen dokumentace na několika místech.Souhlas
Prakticky NIKDY se QThread nemusí dědit...Souhlas
...a nemá děditPověra
worker řešení se naopak má použít skoro vždyPověra Abych nebyl tak úsečný - worker-like řešení s děděním QThread může fungovat stejně dobře a mít některé jiné výhody, například to, že inicializace a start vlákna se přesune z hlavního vlákna, kde "zavazí", někam jinam, kde lépe ctí princip zapouzdřenosti objektu. Shrnul bych to spíš do jiné věty: Přetěžovat QThread::run() je hloupost.
qDebug() << QThread::currentThread(); . To může vést k hodně velikému zmatení. Řešením je posílat signál přes frontu zpráv, například:
connect(this, SIGNAL(sig1()), vlakno, SLOT(slot1()), Qt::QueuedConnection);
Vede to občas k trochu pracnějšímu zápisu: z GUI volám slot ve vlákně a až tam vyvolám signál přes frontu propojený s jiným slotem ve vlákně. Pokud to takhle nefunguje, budu muset svůj přístup přehodnotit a přepsat nějaké aplikace
S vlákny v Qt není moc problémů při vytváření a používání. Ovšem na hotové peklo můžete narazit, až budete chtít vlákno ukončit. Potíž může být i v tom, že u spousty Qt objektů ani netušíte, že si startují vlastní vlákna (QNetworkAccessManager).
Tiskni
Sdílej: