رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

فانوس

کاربـــر عـــــادی
  • تعداد ارسال ها

    17
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    2

آخرین بار برد فانوس در 26 فروردین

فانوس یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

4 خوب

درباره فانوس

توسعه‌ دهنده بَک اِند
کاربـــر عـــــادی
  • تاریخ تولد تعیین نشده

اطلاعات شبکه‌ای

موقعیت

  • شهر
    شیراز

آخرین بازدید کنندگان نمایه

284 بازدید کننده نمایه
  1. فانوس

    سلام صفحه ای دارم که برای درج اطلاعات کار هست. متغیری را در 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 دیگه وجود داره؟
  2. فانوس

    ممنونم. تونستم دلیل اینکه چندین بار داده ای را که از پورت میخواند امیت میکرد را پیدا کنم دلیلش اینه که چون connect مربوط به سیگنال و اسلات را در متد سازنده کلاسم گذاشته بودم. نمیدونم چرا اما زمان که صفحه cpp ایجاد میشد این دستور connect چندین بار اجرا میشد . برای همین ۸ بار امیت مربوط به سیگنال را می خوند. خلاصه اینکه تابعی نوشتم که کار connect را انجام بده در زمانی که میخوام و از توی تابع سازنده کلاس بیرون اوردمش و اینکه پارامتر پنجم مربوط به connect را هم نوشتم Qt::UniqeConnect فکر کنم بود.
  3. فانوس

    سلام ممنونم. درست شد. مشکل اینجا بود که زمان خوندن کارت از دستگاه نمیدونم چرا ۵ بار دیتای کارت را برای این صفحه امیت میکرد. بار اول ذخیره می شد اما تا میخواست نشون بده دوباره متدش ران میشد و تو دفعات بعد نمیتونست متد درست کار کنه. اومدم گفتم اگر بار اول کارت را گرفتی و برای این ایدی ذخیره کردی حالا دوباره همین متد برای همین کارت و همین یوزر داره فراخوانی میشه return کن. حالا داره کار میکنه باقی کدها درست بود. ممنونم از وقتی که برام گذاشتید.
  4. برنامم قرار کارت ار اف ایدی بخونه. و البته هم میخونه هر کارتی که کاربر بزنه. کد کارت را در دیتابیس چک میکنه و به کاربر پذیرش و یا عدم پذیرش کارت را اعلام میکنه مشکلم اینجاست که پروپرتی تعریف کردم که اگر کارت درست بود ستش کنه تورو اگر غلط بود فالس setacptCard(true); تو سمت کیو ام ال نوشتم : UsersCard { id:uc } Item { id: name Connections{ target: uc onAcptCardChanged: { console.log("======+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|"); errpan.visible=true; }} کدم کامل اجرا میشه اما این متد اصلا فایر نمیشه و اجرا نمیکنه: onAcptCardChanged: { console.log("======+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|"); errpan.visible=true;
  5. فانوس

    چون منظورم را متوجه نشدید عرض میکنم. یعنی گل بود و به سبزه نیز آراسته شد. یعنی مونده گوگل هم تحریممون کنه (که به نفعشه که نمیکنه) بنده منظورم جمله تناقض دار هست. مثل اینکه بد متوجه شدید دوست من.
  6. فانوس

    سلام مشکل عدم نمایش حل شد. مشکلش این بود که وقتی می خواست کویری را اجرا کنه دیتابیس را پیدا نمیکرد چون دیتابیسم پیش فرض سیستم نیود . با ارسال دیتابیس مشکل اولم حل شد . مشکل دومم اینه که دیتا را میاره توی 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 // } // } } } } چجوری خروجی کویری را در لیست ویو نمایش بدم هیچ خطایی ندارم فقط چیزی تو لیست ویو لود نمیشه اصلا
  7. فانوس

    دیتای من اینه : 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 این مبحث دیتا رو پیچیده کرده.
  8. فانوس

    سلام. ممنون از راهنماییتون . اینی که گفتی فهمیدم . اما در کل هنوز بلد نیستم ازش استفاده کنم. ممنون به هر حال
  9. فانوس

    بله .خیلی هم خوب .
  10. سلام. من میخوام محتویات دیتابیسم را نمایش بدم تو لیست ویو توسط کویری که در کلاس دیتابیسم ساخته میشه اما اصلا مدل منو تو کلاس 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; } من نمیدونم کجا اشتباه کردم. ممنون میشم کمکم کنید
  11. فانوس

    سلام. ممنون از راهنماییتون. اما هنوز چیزی دستگیرم نشده. میشه بیشتر راهنماییم کنین.
  12. سلام چندتا سوال داشتم در زمینه اتصال دیتابیس به پروژه کوئیک من تا اینجا متوجه شدم که برای اتصال دیتابیس ابتدا باید یک فایل مختص درج و حذف و ویرایش و اتصال دیتابیس درست کرد. و یک فایل برای مدل. اولی که مشکلی ندارم و کاملا واضحه میمونه دومی: QML - Lesson 016. SQLite database and the working with it in QML Qt ۱ - رول Role چه استفاده ای داره؟ نام هایی که انتخاب می‌کنه چه کاربردی داره؟ ۲ - هش برای چی هست؟ ۳ - تابعی که خروجی QVariant هست برای چی تعریف شده؟ ۴ - ایا به ازای تمامی جداولی که در دیتابیس است باید رول تعریف شه؟ ۵ - زمانیکه چندین جدول داریم چجوری این فایل مدل باید تعریف بشه. ممنون میشم برام ساده توضیح بدید.
  13. فانوس

    حل شد. 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" }
  14. فانوس

    سلام. طبق جست و جویی که کردم با اضاف کردن این لینک به .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; } }
  15. فانوس

    سلام. این مثال روی دستگاه داره کار میکنه . من این تکه کد ها را از همین مثال کپی کردم. درست کار میکنه . اما کدی که من کپی کردم کار نمیکنه. میخواستم بدونم چه چیزهایی را دیگه باید کپی کنم تا کار کنه.
×