Jump to content

QT6


Jurkins
 Share

Recommended Posts

Jurkins

Sveiciens brīnišķīgajā rītā!

Man ir uznācis neliels saasinājums 😁 programmēšanā (tīri kā mūžizglītība). Sen... 2000+ darījos ar Delphi/paskālu (plusi toreiz likās kosmoss, žēl, ka tā), tagad iegrimu QT6. Bet juška tāda, ka progress ir gājis atpakaļ. 😁 Delfiniekā darbam ar datubāzēm bija lērums vizuālo tabulveida komponentu. Tur pašu velnu ar pāris klikšķiem. QT kā puslīdz nobeigts šāds komponents QTableView, bet ar ārkārtīgi nabadzīgu saturu. Piemēram, hederī nevar ielikt delegātu, piem. ComboBox, filtrēšanai un tamlīdzīgi. Jā, protams, var kombinēt kopā visu ko balstoties uz šamā parent klasi. Kā ir? Vai tiešām visu "no nulles" dara paši, vai vispār nedara 😁 vai tomēr ir kaut kādi gatavi "trešo pušu" komponenti kā kādreiz (kad zāle bija zaļāka)?

 

p.s. vai tagad visu mēģina uzprogrammēt izmantojot internetveikala šablonu? "Jaunās vēsmas" grāmatvedei lepni pasniedza tādu huiņu ar webinterfeisu, ka šī zibeņus šķel.

Link to comment
Share on other sites

AndrisBB

Lietoju Qt katru dienu. QTableView gan nav bijusi vajadzība.

Qt nav freimworks, kur kautko panākt ar pāris klikšķiem. Ja tādu vajag, tad meklē ko citu. Rēķini ka Qt jau iet uz sākot no mikraskopiskiem MCU, līdz pilnizmēra applikācijām. Nav jau tik viegli uztaisīt tādus universālos widžetus, kas darbojies ar 1000 dažnedažādām datubāzēm, nepiesārņojot visu freimworku utt. tā jau paiet pus diena lai viņu nokompilētu 😂 (nepārspīlējot)

 

Ja vajag kautko kustom, nu tad extendo to QTableView un kautkādu savu QAbstractItemModel vai kas tur vēl vajadzīgs.

 

https://doc.qt.io/qt-6/qsqltablemodel.html kā models neder?

  • Patīk 1
Link to comment
Share on other sites

Jurkins
Posted (edited)

QTablView jau tāpat paliek kā interfeisa elements (tabula). Tevis minētais jau ir modelis, ko pieslēdz tai tabulai. Bet uzlikt komboboksu hederī nevar. Var ielikt jebkādu vidžetu cellēs, bet hederī nevar bez dejām ar tamburīnu.

Tāpat nevar (bez dejām) izmantojot "oficiālos"vidžetus, piemēram nofrīzot pirmo rindu. Delfiniekā bija gatavi komponenti  (Tu tak zini, ka cilvēks ir slinks) visādām tādām izdarībām.

Pirms 19 minūtēm , AndrisBB teica:

Qt nav freimworks, kur kautko panākt ar pāris klikšķiem.

OK, nu šito jau pamazām sāku saprast.

Edited by Jurkins
Link to comment
Share on other sites

AndrisBB

Ja jau tev vajag kautkādas tabulas/formas utt, plus visdrīzāk uz Win, tad vaita kautkās MS freimworks nebūs tuvāks 'ar pāris klikšķiem'?

Link to comment
Share on other sites

HIGH-Zen
pirms 2 stundām , Jurkins teica:

Delfiniekā bija gatavi komponenti

Un joprojām ir. Ir arī tabulas iekš Lazarus. Tomēr lai laistu prodokšenā ir jāpietvīko.

Savā laikā ar PyQT un/vai PySide uzbliezu tabulas līdzīgas Delphi-iem. Vienīgais iemesls kāpēc turpmāk neizmantoju Qt, bet Lazarus, bija ātrdarbība (pitona datubāzes modulis bija baigi lēnais).

Bija prototipi un Lazarus uzvarēja.

Edited by HIGH-Zen
Link to comment
Share on other sites

Jurkins
Posted (edited)
Pirms 37 minūtēm , AndrisBB teica:

vaita kautkās MS freimworks nebūs tuvāks 'ar pāris klikšķiem'

HVZ, nezinu. Jātaustās. Tas QT6 visumā ir baigi patīkams.

 

Pirms 24 minūtēm , HIGH-Zen teica:

iekš Lazarus

Nu velns viņzin, kaut kā negribas atkārtot delfus, bet, paldies, jāpaskatās. Nebiju nemaz par tādu dzirdējis, pēdējais, ar ko kaut ko darīju bija delphi7.

Pirms 24 minūtēm , HIGH-Zen teica:

(pitona datubāzes modulis bija baigi lēnais).

QT jau kājas dīgst no C++, cik saprotu, tas pitons tāds kā bonusiņš. Es arī taustos pa pitonu, pēc tam var to visu pārlikt uz c++.

Edited by Jurkins
Link to comment
Share on other sites

AndrisBB

Reāli jau Qt tāds freimworks, kuram jādarbojas uz visa.

Ja sāktu katru clasi uztaisīt super iespējām bagātu, tad būs atkal 'par smagu' kautkam mazākam. Vai arī tad jātaisa ntās TableView klases.

Bet nu reāli jau tās klases ir izveidotas tā ka viņas relatīvi viegli paplašināt un pielāgot savām vajadzībām. Miljons jūzkeisus jau neatbalstīsi.

Link to comment
Share on other sites

HIGH-Zen
Pirms 14 minūtēm , Jurkins teica:

Nebiju nemaz par tādu dzirdējis, pēdējais, ar ko kaut ko darīju bija delphi7.

Vēl vari uzmest aci CodeTyphon Studio. Tas ir Lazarus forks ar iekļautiem moduļiem, nav pašam jāmeklē un jāinstalē, viss iekļauts (KControls-> TKGrid).

Edited by HIGH-Zen
Link to comment
Share on other sites

AndrisBB

Ja tiešām taisi kautko puslīdz nopietnu, tad jau labāk pieturēties pie Qt.

Ja kāds nebūtisks hobijprojekts, tad jau var eksperimentēt. Bet nu atkal, ganjau atkal citos freimworkos atradīsies citas problēmas/ierobežojumi.

  • Patīk 1
Link to comment
Share on other sites

pirms 4 stundām , Jurkins teica:

p.s. vai tagad visu mēģina uzprogrammēt izmantojot internetveikala šablonu? "Jaunās vēsmas" grāmatvedei lepni pasniedza tādu huiņu ar webinterfeisu, ka šī zibeņus šķel.

Ir izaugusi indoktrinēta paaudze kas klienta-servera aplikāciju uzskata par vakardienu. Un nav pat redzējuši cik ātri/ērti var strādāt native GUI aplikācija.

Es protams saprotu , ka grib taupīt naudu un programmēt visu html, bet rezultāts parasti ir riebīgs. 

Cilvēki pat nevar iedomāties, ka var strādāt zibens ātrumā rokas neatraujot no klaviatūras lai peli atrastu. 

  • Patīk 3
Link to comment
Share on other sites

Jurkins
Pirms 6 minūtēm , zeds teica:

rezultāts parasti ir riebīgs

Es jau padomāju, ka vienkārši esmu vecs stagnāts :haha:

Link to comment
Share on other sites

AndrisBB

Ir jau arī plusi tam ka izmanto HTML, parasti finansiāli. Aka pietiek ar pāris programmētājiem kuri var izveidot vienu GUI komponentu biblioptēku priekš iOS, Androīda, desktopa un galu galā weba, plus vēl beigās uz kāda embedded produkta (kamēr vien browsers tur ir pieejams).

Qt programmētāji dārgs prieks.

 

Visulaiku gribās izmēģināt Tauri https://tauri.app/, bet nav gadījies vēl piemērotrs projekts.

Link to comment
Share on other sites

Pirms 1 minūtes , AndrisBB teica:

programmētāji dārgs prieks.

noteikti.. pats šobrīd salīdzinot cik laika aizņem kāds papildinājums desktopa aplikācijai un cik vajag, lai ko līdzīgu WEBā pamainītu, atšķirība ir vairākās reizēs par sliktu webam.

Link to comment
Share on other sites

AndrisBB

Varbūt kautkādos noteiktos scenārijos.

Bet pa lielam pēc manas pieredzes tā nav. Webs ir easy, var atrast koderus pāris dienu laikā. Qt koderus, nu tur grūti iet. Labāk to resursu izmantot kautkur citur.

 

Vēl populārs risinājums ir Qt applikācija, bet liela daļa UI darbojas iekš QtWebEngine. Tad kritiskais kods sanāk C++, bet UI kods iekš HTML. Katra devu grupa tad var fokusēties uz savu ekspertīzes lauciņu.

Edited by AndrisBB
Link to comment
Share on other sites

Nav ne jausmas, kas tas tāds QT6, bet AI raksta tā:

 

How do I add custom widgets to QHeaderView in Qt 6?


In Qt 6, you can add custom widgets to QHeaderView by using the setSectionWidget() function. This function allows you to set a custom widget for a specific section in the header view.

Here is an example of how you can do this:

```cpp
#include <QHeaderView>
#include <QPushButton>

QHeaderView* headerView = new QHeaderView(Qt::Horizontal);

QPushButton* button = new QPushButton("Custom Button");
headerView->setSectionWidget(0, button);
```

In this example, a new QHeaderView is created with the orientation set to horizontal. Then, a new QPushButton is created and set as the custom widget for the first section (index 0) in the header view.

Please note that the section index is zero-based, so the first section is at index 0, the second section is at index 1, and so on.

Also, remember to manage the lifetime of your custom widgets. In this example, the button is created on the stack, so it will be automatically destroyed when it goes out of scope. If you create the button on the heap, you will need to manage its deletion manually.

Please note that this feature is available from Qt 6.0 onwards.

 

  • Patīk 1
Link to comment
Share on other sites

Jurkins

Jā, tajā Qt var izdarīt pašu velnu.  Es jautāju, vai nav gatavu trešo pušu komponentu kā delfiniekā.

@AndrisBB bildē vidžeti ir neviz hederī, bet 1. rindā. To QTableView prot standartā.

Link to comment
Share on other sites

Jurkins
pirms 4 stundām , AndrisBB teica:

reku piemēres kā sublasēt QHeaderView

Paldies. Bet šitajā jāiedziļinās, uz pirmo sitienu ķīniešu ābece. Biju šito lapu te vienu vakaru atvēris, bet paslīdēja garām kaut kā.

Link to comment
Share on other sites

Jurkins
Posted (edited)

Es pašlaik izdarījos "perversāk" - par hederi izmantoju otru QTableView. Tam nav nekādu problēmu padot delegātus kādus vajag. Abi bez saviem oriģinālajiem hederiem. Kods tīri konceptuāls.

import sys
from PyQt6.QtWidgets import QTableView, QVBoxLayout, QApplication, QWidget, QHBoxLayout, QScrollBar
from PyQt6.QtGui import *
from PyQt6.QtCore import *


class MainForm(QWidget):
    def __init__(self, title):
        super().__init__()

        self.headerView = QTableView(self)
        self.dataView = QTableView(self)
        self.headerView.setParent(self)
        
        self.horLayout = QHBoxLayout(self)
        self.vertLayout = QVBoxLayout(self)
        self.setLayout(self.horLayout)
        
        self.headerView.setFixedHeight(28)
        self.headerView.horizontalHeader().hide()
        self.headerView.verticalHeader().hide()
        self.dataView.horizontalHeader().hide()
        self.dataView.verticalHeader().hide()

        self.vertLayout.addWidget(self.headerView, 0)
        self.vertLayout.addWidget(self.dataView)
        self.vertLayout.setContentsMargins(1,1,1,1)
        self.vertLayout.setSpacing(0)
        
        headerModel = QStandardItemModel(self)
        dataModel = QStandardItemModel(self)

        self.headerView.setModel(headerModel)
        self.dataView.setModel(dataModel)
        headerModel.setColumnCount(10)
        headerModel.setRowCount(1)
        dataModel.setColumnCount(10)
        dataModel.setRowCount(20)

        self.headerView.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
        self.dataView.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)

        self.dataView.horizontalScrollBar().valueChanged.connect(self.on_scroll)
        self.dataView.verticalScrollBar().valueChanged.connect(self.on_scrollV)

        self.vertScroll = QScrollBar(self)


        self.vertWidget = QWidget(self)
        self.vertWidget.setLayout(self.vertLayout)

        self.horLayout.addWidget(self.vertWidget)
        self.horLayout.addWidget(self.vertScroll)

        print(self.dataView.verticalScrollBar().minimum())
        print(self.dataView.verticalScrollBar().maximum())
        print(self.dataView.horizontalScrollBar().minimum())
        print(self.dataView.horizontalScrollBar().maximum())

        self.vertScroll.valueChanged.connect(self.on_vertScroll)

    def on_scroll(self, value):
        #print(value)
        print(self.dataView.verticalScrollBar().maximum())
        self.headerView.horizontalScrollBar().setValue(value)
        print(self.headerView.horizontalScrollBar().value())


    def on_scrollV(self, value):
        #print(self.dataView.verticalScrollBar().value())
        pass

    def on_vertScroll(self, value):
        self.dataView.verticalScrollBar().setValue(value)
        print(self.dataView.verticalScrollBar().value())
        print(self.dataView.verticalScrollBar().maximum())


def main():
    app = QApplication(sys.argv)
    #app.setStyle(QStyleFactory.create("windows")) 

    window = MainForm('DB')
    window.show()
    window.vertScroll.setMaximum(window.dataView.verticalScrollBar().maximum())
    
    sys.exit(app.exec())

if __name__ == "__main__":
    main()

 

image.png.9d75a702726e894c11dbe0bd96b023ea.png

 

Kas šādā pieejā ir nepareizs? Jautāju pilnīgi nopietni.

Gan jau tāpat var pielikt vertikālo hederi, ja vajag.

Interesenti tas, ka lai gan datu rindu skaits ir zināms, lai "sainhronizētu"ārējo vertikālo skrollējamo ar neredzamo iekšējo, to vajadzēja darīt iekš main(), jo nezin kāpēc

self.dataView.verticalScrollBar().maximum() saka, ka esot nulle.

 

Edited by Jurkins
Link to comment
Share on other sites

Jurkins

Interesanti vispār ar tiem tabulas skrollbāriem. Kamēr aplikācijas logs ar tabulu nav izvadīts uz ekrāna, tikmēr abiem skrollbāriem izmērus rāda konstantus:

Horizontal Scrollbar Geometry = PyQt6.QtCore.QRect(0, 0, 100, 30)
Vertical Scrollbar Geometry = PyQt6.QtCore.QRect(0, 0, 100, 30)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...