ورود

View Full Version : ساخت پنجره سفارشی



alireza.alavi2015
شنبه 31 مرداد 1394, 16:00 عصر
چطور میشه پنجره ای مثل تلگرام ایجاد کرد

134541

کامبیز اسدزاده
شنبه 31 مرداد 1394, 18:08 عصر
چطور میشه پنجره ای مثل تلگرام ایجاد کرد

134541

با استفاده از Widget میشه ولی اگه بخوای مثل تلگرام و حتی بهتر از اون باشه QML بهترین گزینه هستش.

alireza.alavi2015
یک شنبه 01 شهریور 1394, 15:54 عصر
مرسی
سورس تلگرام رو دیدم. فقط متوجه شدم میشه؛ دنبال اینم که چطور میشه!

کامبیز اسدزاده
یک شنبه 01 شهریور 1394, 19:54 عصر
مرسی
سورس تلگرام رو دیدم. فقط متوجه شدم میشه؛ دنبال اینم که چطور میشه!

خیلی راحته عزیز ! الان همین کسی که گذاشتی از Item , Rectangle , Button , Text تشکیل شده.
به همین راحتی فقط کافیه یکم خلاقیت در طراحی داشته باشی.

alireza.alavi2015
دوشنبه 02 شهریور 1394, 13:31 عصر
منظورم محتوای درون پنجره نیست. خود پنجره مدنظرمه
Frameless ، قابلیت جابجایی و Resize
روی آیکون سمت چپ و بالای پنجره(واقع در نوار عنوان) کلیک کردید منوی سیستم نمایش داده بشه
چیزی شبیه پنجره تلگرام(فقط خود پنجره نه محتویات...)
در یک کلمه CustomWindow

alireza.alavi2015
دوشنبه 02 شهریور 1394, 13:32 عصر
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick.Controls 1.3

ApplicationWindow {
id: rootWin
property alias rootWin : rootWin

title: " "
visible: true
width: 360; height: 480

color: "transparent"
flags: Qt.FramelessWindowHint

Header {
id: header
width: parent.width;
btnQuit.onClicked: Qt.quit()
}

Rectangle {
anchors.top: header.bottom
width: parent.width
anchors.bottom: parent.bottom
color: "white"
border.color: "black"
}
}

alireza.alavi2015
دوشنبه 02 شهریور 1394, 13:32 عصر
import QtQuick 2.4
import QtQuick.Controls 1.3

Rectangle {
id: recHeader

signal clicked()
property alias btnQuit: btnQuit
property point clickPos: Qt.point(0, 0)

color: "#b2cbfb"
height: 50; width: 450
border.color: "black"

MouseArea {
id: mouseAreaDragWin

anchors.fill: parent

onPressed: clickPos = Qt.point(mouse.x, mouse.y)
onPositionChanged: {
var delta = Qt.point(mouse.x -clickPos.x,
mouse.y-clickPos.y )
rootWin.x += delta.x;
rootWin.y += delta.y;
}

//onDoubleClicked: rootWin.showMaximized()
/*onDoubleClicked: rootWin.Maximized ?
rootWin.showNormal() :
rootWin.showMaximized()*/

//TODO : ???
onDoubleClicked: !rootWin.Maximized ? rootWin.showMaximized() : rootWin.showNormal();

ToolButton {
id: btnQuit

anchors.right: parent.right
anchors.rightMargin: 8
anchors.verticalCenter: parent.verticalCenter

onClicked: recHeader.clicked()
iconSource: "close.svg"
}
}
}

alireza.alavi2015
دوشنبه 02 شهریور 1394, 13:35 عصر
http://8pic.ir/images/e6fj0qhsw2wftk160vx6.png

alireza.alavi2015
دوشنبه 02 شهریور 1394, 13:43 عصر
20% کار انجام شد!

alireza.alavi2015
پنج شنبه 12 شهریور 1394, 07:10 صبح
کشف جدید!
واسط کاربری تلگرام با ویجت ها ی کیوت طراحی شده نه با QML

negative60
جمعه 13 شهریور 1394, 12:32 عصر
کشف جدید!
واسط کاربری تلگرام با ویجت ها ی کیوت طراحی شده نه با QML

اين رو من تو تاپيک قبلی هم گفته بودم اما ظاهراً کسی اين مسئله رو قبول نکرده بود
با QML ميشه پنجره اختصاصی ساخت اما مشکلاتی اساسی وجود داره مثل پر پر زدن پنجره، موقع تغيير اندازه پنجره ابجکتهای درون پنجره ديرتر از قالب پنجره موقعيت و سايزشون تغيير ميکنه، و همچنين در ويندوز امکان استفاده از سايه برای پنجره وجود نداره

حامد مصافی
جمعه 13 شهریور 1394, 17:22 عصر
قبلا این کار رو کردم. قسمت‌های مرتبط رو از یکی از پروژه‌هام بیرون کشیدم. می‌تونید از این مثال استفاده کنید،
من پروژه حاضر رو به عنوان نمونه عرضه‌ می‌کنم، در مورد استفاده از سورس کاملا آزادید فقط اگر خواستید در برنامه‌تون استفاده کنید حتما تصاویر تم رو عوض کنید.

alireza.alavi2015
شنبه 14 شهریور 1394, 13:45 عصر
SendMessage(
(HWND)_parent->winId(),
WM_NCLBUTTONDOWN,
//ظاهرا متغیر زیر تعریف نشده است. بجاش صفر نوشتم کار کرد
//اما پنجره ریسایز نمیشه
pos, // 0
0);
}

134989

alireza.alavi2015
شنبه 14 شهریور 1394, 13:50 عصر
با QML ميشه پنجره اختصاصی ساخت اما مشکلاتی اساسی وجود داره مثل پر پر زدن پنجره، موقع تغيير اندازه پنجره ابجکتهای درون پنجره ديرتر از قالب پنجره موقعيت و سايزشون تغيير ميکنه، و همچنين در ويندوز امکان استفاده از سايه برای پنجره وجود نداره
به نظر من حق با شماست
هنوز هیچ پروژه درست و حسابی از شرکت های تجاری که با QML پیاده سازی شده باشه ندیدم یا حداقل انگشت شمار هست

حامد مصافی
شنبه 14 شهریور 1394, 16:04 عصر
من هنگام نوشتن این کلاس تصمیم داشتم از امکانات Win API در محیط ویندوز و از کد‌نویسی‌هایی که انجام دادم برای سایر محیط‌ها استفاده کنم. اما قسمت ویندوز رو هرگز تمام نکردم. متاسفانه هنگامی که داشتم پروژه رو برای شما‌ آماده میکردم این مسأله یادم نبود و مجدداً ویندوز رو فعال کردم. ضمن پوزش نسخه اصلاح شده که در همه محیط‌ها کار کنه رو مجدداً ارائه میکنم.