-
تعداد ارسال ها
17 -
تاریخ عضویت
-
روز های برد
2
آخرین بار برد فانوس در 26 فروردین 1398
فانوس یکی از رکورد داران بیشترین تعداد پسند مطالب است !
اعتبار در سایت
4 خوبدرباره فانوس
توسعه دهنده بَک اِند
کاربـــر عـــــادی
کاربـــر عـــــادی
- تاریخ تولد تعیین نشده
اطلاعات شبکهای
- شناسه لینکدین
موقعیت
-
شهر
شیراز
آخرین بازدید کنندگان نمایه
1,223 بازدید کننده نمایه
-
فانوس شروع به دنبال کردن عدم اجرای سیگنال تغییر مقدار یک متغیر در QML و ارسال پارامتر بین صفحات qml کرد
-
سلام صفحه ای دارم که برای درج اطلاعات کار هست. متغیری را در qml تعریف کردم بنام property int mainid در این صفحه دارم : Component.onCompleted:{ //create new id console.log(mainid); if(mainid==-1) un.setPointers(-1);//اگر کاربری برای ویرایش نیست پس کاربر جدید بساز else { un.setMainId(mainid); console.log("<><><><><><><><><><><><><><><><><>"); console.log(mainid); un.setPointers(mainid);//حالت ویرایش کاربر فعال کن } } در صفحه مدیریت کاربران میخواهم با زدن دکمه ویرایش این صفحه باز شود (تا اینجا همه چیز درست کار میکنه) میخواهم مقدار mainid را از صفحه مدیریت کاربر مقدار بدهم: } }} Column{MyButton{txt:qsTr("Edit");onClicked: { //ارسال پارامتر×××××××××××××××××××××× edit(txtid.text); } } } } } } function showLoading(item) { loadingpane.visible=item; } function edit(item) { // nu.nu_mainid=item; view.source=""; //CreateUser.setMainID(item); CreateUser.mainid=item;//در این قسمت میخواهم ایدی را برای صفحه درج کاربر ارسال کنم که کار نمیکنه un.setPointers(item); view.source="NewUser.qml"; } در این کد من کد کاربر را برای صفحه درج کاربر نمیتونم ارسال کنم. چه روشی برای ارسال پارامتر از یک صفحه qml به یک صفحه qml دیگه وجود داره؟
-
ممنونم. تونستم دلیل اینکه چندین بار داده ای را که از پورت میخواند امیت میکرد را پیدا کنم دلیلش اینه که چون connect مربوط به سیگنال و اسلات را در متد سازنده کلاسم گذاشته بودم. نمیدونم چرا اما زمان که صفحه cpp ایجاد میشد این دستور connect چندین بار اجرا میشد . برای همین ۸ بار امیت مربوط به سیگنال را می خوند. خلاصه اینکه تابعی نوشتم که کار connect را انجام بده در زمانی که میخوام و از توی تابع سازنده کلاس بیرون اوردمش و اینکه پارامتر پنجم مربوط به connect را هم نوشتم Qt::UniqeConnect فکر کنم بود.
-
سلام ممنونم. درست شد. مشکل اینجا بود که زمان خوندن کارت از دستگاه نمیدونم چرا ۵ بار دیتای کارت را برای این صفحه امیت میکرد. بار اول ذخیره می شد اما تا میخواست نشون بده دوباره متدش ران میشد و تو دفعات بعد نمیتونست متد درست کار کنه. اومدم گفتم اگر بار اول کارت را گرفتی و برای این ایدی ذخیره کردی حالا دوباره همین متد برای همین کارت و همین یوزر داره فراخوانی میشه return کن. حالا داره کار میکنه باقی کدها درست بود. ممنونم از وقتی که برام گذاشتید.
-
برنامم قرار کارت ار اف ایدی بخونه. و البته هم میخونه هر کارتی که کاربر بزنه. کد کارت را در دیتابیس چک میکنه و به کاربر پذیرش و یا عدم پذیرش کارت را اعلام میکنه مشکلم اینجاست که پروپرتی تعریف کردم که اگر کارت درست بود ستش کنه تورو اگر غلط بود فالس setacptCard(true); تو سمت کیو ام ال نوشتم : UsersCard { id:uc } Item { id: name Connections{ target: uc onAcptCardChanged: { console.log("======+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|"); errpan.visible=true; }} کدم کامل اجرا میشه اما این متد اصلا فایر نمیشه و اجرا نمیکنه: onAcptCardChanged: { console.log("======+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|"); errpan.visible=true;
-
چون منظورم را متوجه نشدید عرض میکنم. یعنی گل بود و به سبزه نیز آراسته شد. یعنی مونده گوگل هم تحریممون کنه (که به نفعشه که نمیکنه) بنده منظورم جمله تناقض دار هست. مثل اینکه بد متوجه شدید دوست من.
-
سلام مشکل عدم نمایش حل شد. مشکلش این بود که وقتی می خواست کویری را اجرا کنه دیتابیس را پیدا نمیکرد چون دیتابیسم پیش فرض سیستم نیود . با ارسال دیتابیس مشکل اولم حل شد . مشکل دومم اینه که دیتا را میاره توی QDebug نمایش میده اما تو لیست ویو به فیلدهای جدولم دسترسی ندارم اصلا. هیچ خطایی نشون نمیده اینم کد مدل که هدر و سورس با هم هستند: از روی این لینک کار کردم #ifndef MYMODEL_H #define MYMODEL_H #include <QSqlQueryModel> #include <QSqlRecord> #include <QSqlField> #include "db.h" class MyModel : public QSqlQueryModel { Q_OBJECT public: explicit MyModel(QObject *parent = nullptr); QStringList userRoleNames() const { QStringList names; for (int i = 0; i < record().count(); i ++) { names << record().fieldName(i).toUtf8(); } return names; } //my function void setQuerystr(const QString &query); QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash<int , QByteArray>roleNames() const override{ return m_roleNames; } public: void generateRoleNames(); QHash<int , QByteArray> m_roleNames; DB db; }; #endif // MYMODEL_H ==============================================================================================// #include "mymodel.h" MyModel::MyModel(QObject *parent) : QSqlQueryModel(parent) { } void MyModel::setQuerystr(const QString &query) { QSqlQueryModel::setQuery(query,QSqlDatabase::database("MainDB")); generateRoleNames(); } QVariant MyModel::data(const QModelIndex &index, int role) const { // QVariant value; // if (role<Qt::UserRole) { // value = QSqlQueryModel::data(index,role); // } // else // { // int columnIdx = role - Qt::UserRole -1; // QModelIndex modelindex = this->index(index.row(),columnIdx); // value = QSqlQueryModel ::data(modelindex,Qt::DisplayRole); // } // QVariant value; if (index.isValid()) { if (role < Qt::UserRole) { value = QSqlQueryModel::data(index, role); } else { int columnIdx = role - Qt::UserRole - 1; QModelIndex modelIndex = this->index(index.row(), columnIdx); value = QSqlQueryModel::data(modelIndex, Qt::DisplayRole); } } return value; } //QHash<int, QByteArray> MyModel::roleNames() const //{ // return m_roleNames; //} void MyModel::generateRoleNames() { m_roleNames.clear(); // for (int i = 0; i < record().count(); ++i) // { // m_roleNames.insert(Qt::UserRole+1,record().fieldName(i).toUtf8()); // } for (int i = 0; i < this->record().count(); i ++) { m_roleNames.insert(Qt::UserRole + i + 1, record().fieldName(i).toUtf8()); } } اینم کد qml: import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.2 import QtQuick.Controls.Material 2.2 import QtQuick.VirtualKeyboard 2.1 import io.myqt.UserManage 1.0 import MyModel 1.0 CustomeBackground { id:mngusr property StackView view UserManage{id:um} Component.onCompleted: myModel.updateModel(); MyModel{id:myModel} MyButton { id:btnclose height: 45 anchors.left: parent.left anchors.leftMargin: 575 anchors.top: parent.top anchors.topMargin: 0 txt: qsTr("X") fontsize: 20 anchors.right: parent.right anchors.bottom: swipeView.top onClicked: { if(view.depth==1) { mngusr.view.pop(); view.visible=false; } else mngusr.view.pop(); } } Pane{ id: pane width: 400 height: 400 anchors.right: parent.right anchors.rightMargin: 2 anchors.left: parent.left anchors.leftMargin: 2 anchors.bottom: parent.bottom anchors.bottomMargin: 317 anchors.top: btnclose.bottom anchors.topMargin: 0 RowLayout { x: -12 y: 0 width: 716 height: 76 MyLable { id:lbl Layout.preferredHeight: 30 Layout.preferredWidth: 100 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter // anchors.rightMargin: 2 txt : qsTr(" Personel ID :") } MyTextField{ id:mytxt Layout.preferredHeight: 40 Layout.preferredWidth: 70 clip: true Layout.maximumHeight: 40 Layout.maximumWidth: 200 hint: qsTr("Insert the personel id for search...") } MyButton{ id:btnsearch txt:qsTr("SEARCH") onClicked: { if(mytxt.text.length===0) um.fillTableView(-1); else um.fillTableView(mytxt.text); mylistView.model=myModel; } } } } Frame{ x: 21 y: 162 ListView{ id:mylistView implicitHeight: 250 implicitWidth: 250 model: myModel resources:{ var roleList = myModel.userRoleNames var temp = [] for(var i in roleList){ var role = roleList[i] temp.push(columnComponent.createObject(view, { "role": role, "title": role})) } return temp } // delegate: RowLayout{ // width: parent.width // TextField { // //Layout.width: 100 // id: name // text: card // } // } } } } چجوری خروجی کویری را در لیست ویو نمایش بدم هیچ خطایی ندارم فقط چیزی تو لیست ویو لود نمیشه اصلا
-
دیتای من اینه : QSqlQuery DB::UserManage(int id) { QString str; str.append("SELECT ui.[UI_ID],ui.[UI_PID],ui.[UI_Admin],ui.[UI_Active]," "case when(select count(*) FROM t1 ua where ua. [UI_ID]=ui.[UI_ID] and [AT_ID]=1 and [UA_Active]=1)>0 then 1 else 0 end," "case when(select count(*) FROM t2 ua where ua.[UI_ID]=ui.[UI_ID] and [AT_ID]=2 and [UA_Active]=1)>0 then 1 else 0 end," "case when(select count(*) FROM t3 ua where ua.[UI_ID]=ui.[UI_ID] and [AT_ID]=3 and [UA_Active]=1)>0 then 1 else 0 end " "FROM t4 ui "); /*WHERE ui.[UI_Active]=1*/ if(id>-1) { str.append(" where ui.[UI_ID]=");/*and ui.[UI_ID]=*/ str.append(QString::number(id)); } return q; } این نهایت خروجیش میتونه بشه QSqlQueryModel حالا من اینو چجوری بفرستم که تبدیل شه به جیسون بعد تبدیل بتونه تو لیست ویو نشون بده . مثلا تو لینک زیر دیتاش کلا جیسونه JSONListModel - Qt Wiki دیتا من چجوری باید تبدیل شه. کلا من اینو از پایه متوجه نشدم چرا QML این مبحث دیتا رو پیچیده کرده.
-
سلام. ممنون از راهنماییتون . اینی که گفتی فهمیدم . اما در کل هنوز بلد نیستم ازش استفاده کنم. ممنون به هر حال
-
فانوس شروع به دنبال کردن اسلک تمام ایرانیها در همه نقاط جهان را تحریم کرد کرد
-
بله .خیلی هم خوب .
-
فانوس شروع به دنبال کردن راهنمایی در زمینه استفاده از sqlmodel در QML و عدم نمایش دیتا از طریق کلاس مدل کرد
-
سلام. من میخوام محتویات دیتابیسم را نمایش بدم تو لیست ویو توسط کویری که در کلاس دیتابیسم ساخته میشه اما اصلا مدل منو تو کلاس usermanage.qml در لیست ویو نمیشناسه . MyModel.h: #include "mymodel.h" MyModel::MyModel(QObject *parent) : QSqlQueryModel(parent) { } void MyModel::setQuery(const QSqlQuery query) { QSqlQueryModel::setQuery(query); generateRoleNames(); } QVariant MyModel::data(const QModelIndex &index, int role) const { QVariant value; if (role<Qt::UserRole) { value = QSqlQueryModel::data(index,role); } else { int columnIdx = role - Qt::UserRole -1; QModelIndex modelindex = this->index(index.row(),columnIdx); value = QSqlQueryModel ::data(modelindex,Qt::DisplayRole); } return value; } //QHash<int, QByteArray> MyModel::roleNames() const //{ // return m_roleNames; //} void MyModel::generateRoleNames() { m_roleNames.clear(); for (int i = 0; i < record().count(); ++i) { m_roleNames.insert(Qt::UserRole+1,record().fieldName(i).toUtf8()); } } MyModel.cpp: #ifndef MYMODEL_H #define MYMODEL_H #include <QAbstractListModel> #include <QSqlRecord> #include <QSqlField> #include "db.h" class MyModel : public QSqlQueryModel { Q_OBJECT public: explicit MyModel(QObject *parent = nullptr); //my function void setQuery(const QSqlQuery query); QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash<int , QByteArray>roleNames() const override{ return m_roleNames; } private: void generateRoleNames(); QHash<int , QByteArray> m_roleNames; DB db; }; #endif // MYMODEL_H main.cpp: #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQuickStyle> int main(int argc, char *argv[]) { DB database; database.openConnection(); qmlRegisterType<MyModel>("Model", 1, 0, "myModel"); qmlRegisterType<MainWindow>("io.myqt.MainWindow", 1, 0, "MainWindow"); ... QQmlApplicationEngine engine; engine.load(QUrl(QLatin1String("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); } usermanage.qml: import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.2 import QtQuick.Controls.Material 2.2 import QtQuick.VirtualKeyboard 2.1 import io.myqt.UserManage 1.0 import Model 1.0 CustomeBackground { id:mngusr property StackView view UserManage{id:um} Component.onCompleted: myModel.updateModel(); MyButton { id:btnclose height: 45 anchors.left: parent.left anchors.leftMargin: 575 anchors.top: parent.top anchors.topMargin: 0 txt: qsTr("X") fontsize: 20 anchors.right: parent.right anchors.bottom: swipeView.top onClicked: { if(view.depth==1) { mngusr.view.pop(); view.visible=false; } else mngusr.view.pop(); } } Pane{ id: pane width: 400 height: 400 anchors.right: parent.right anchors.rightMargin: 2 anchors.left: parent.left anchors.leftMargin: 2 anchors.bottom: parent.bottom anchors.bottomMargin: 317 anchors.top: btnclose.bottom anchors.topMargin: 0 RowLayout { x: -12 y: 0 width: 716 height: 76 MyLable { id:lbl Layout.preferredHeight: 30 Layout.preferredWidth: 100 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter // anchors.rightMargin: 2 txt : qsTr(" Personel ID :") } MyTextField{ id:mytxt Layout.preferredHeight: 40 Layout.preferredWidth: 70 clip: true Layout.maximumHeight: 40 Layout.maximumWidth: 200 hint: qsTr("Insert the personel id for search...") } MyButton{ id:btnsearch txt:qsTr("SEARCH") onClicked: { if(mytxt.text.length===0) um.fillTableView(-1); else um.fillTableView(mytxt.text); } } } } Frame{ x: 21 y: 162 ListView{ id:mylistView implicitHeight: 250 implicitWidth: 250 model: myModel delegate: RowLayout{ width: parent.width TextField { //Layout.width: 100 id: name text: UI_PID } } } } } usermanage.cpp: void UserManage::fillTableView(int id) { model.setQuery(db.UserManage(id)); } اینم کد دیتابیسم QSqlQuery DB::UserManage(int id) { QString str; str.append("SELECT ui.[UI_ID],ui.[UI_PID],ui.[UI_Admin],ui.[UI_Active]," "case when(select count(*) FROM t1 ua where ua. [UI_ID]=ui.[UI_ID] and [AT_ID]=1 and [UA_Active]=1)>0 then 1 else 0 end," "case when(select count(*) FROM t2 ua where ua.[UI_ID]=ui.[UI_ID] and [AT_ID]=2 and [UA_Active]=1)>0 then 1 else 0 end," "case when(select count(*) FROM t3 ua where ua.[UI_ID]=ui.[UI_ID] and [AT_ID]=3 and [UA_Active]=1)>0 then 1 else 0 end " "FROM t4 ui "); /*WHERE ui.[UI_Active]=1*/ if(id>-1) { str.append(" where ui.[UI_ID]=");/*and ui.[UI_ID]=*/ str.append(QString::number(id)); } return q; } من نمیدونم کجا اشتباه کردم. ممنون میشم کمکم کنید
-
سلام. ممنون از راهنماییتون. اما هنوز چیزی دستگیرم نشده. میشه بیشتر راهنماییم کنین.
-
سلام چندتا سوال داشتم در زمینه اتصال دیتابیس به پروژه کوئیک من تا اینجا متوجه شدم که برای اتصال دیتابیس ابتدا باید یک فایل مختص درج و حذف و ویرایش و اتصال دیتابیس درست کرد. و یک فایل برای مدل. اولی که مشکلی ندارم و کاملا واضحه میمونه دومی: QML - Lesson 016. SQLite database and the working with it in QML Qt ۱ - رول Role چه استفاده ای داره؟ نام هایی که انتخاب میکنه چه کاربردی داره؟ ۲ - هش برای چی هست؟ ۳ - تابعی که خروجی QVariant هست برای چی تعریف شده؟ ۴ - ایا به ازای تمامی جداولی که در دیتابیس است باید رول تعریف شه؟ ۵ - زمانیکه چندین جدول داریم چجوری این فایل مدل باید تعریف بشه. ممنون میشم برام ساده توضیح بدید.
-
حل شد. InputPanel{ id:inputpanel visible:active y:active?parent.height - inputpanel.height : parent.height anchors.left: parent.left anchors.right: parent.right } TextInput{ id:input inputMethodHints: Qt.ImhDigitsOnly focus: Qt.inputMethod.visible; text: "123211" } TextInput{ id:input2 anchors.top:input.bottom inputMethodHints: Qt.ImhLowercaseOnly focus: Qt.inputMethod.visible; text: "123211" }
-
سلام. طبق جست و جویی که کردم با اضاف کردن این لینک به .pro static { QT += svg QTPLUGIN += qtvirtualkeyboardplugin } و این کد به فایل int main(int argc, char *argv[]) { qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); } در فایل اصلی هم این کد را نوشتم اما کار نمیکنه وقتی روی تکسم کلیل میکنم. البته روی دیوایس لمسی import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.VirtualKeyboard 2.1 Window { visible: true width: 640 height: 480 TextInput { id: textInput; text:"ssssss" height: 120; width: parent.width - 2; anchors.bottom: keyboard.top color: "#000000"; // black // http://doc.qt.io/qt-5/qinputmethod.html# properties focus: Qt.inputMethod.visible; verticalAlignment: TextInput.AlignVCenter; } }
-
سلام. این مثال روی دستگاه داره کار میکنه . من این تکه کد ها را از همین مثال کپی کردم. درست کار میکنه . اما کدی که من کپی کردم کار نمیکنه. میخواستم بدونم چه چیزهایی را دیگه باید کپی کنم تا کار کنه.