Chương 3 : CÔNG CỤ
3.2 PHẦN MỀM QT CREATOR
3.2.2 Các lớp của QT Creator
Trong QT Creator có hỗ trợ các lớp giúp ta thực hiện nhiều thao tác khác nhau. Số lượng các lớp mà QT hỗ trợ ngày nay lên tới gần 1600 lớp. Trong số đó người nghiên cứu có sử dụng một số lớp sau để thực hiện đề tài của mình:
3.2.2.1 QList
QList: là một trong các lớp lưu trữ chung của Qt. Nó lưu trữ các mục trong một
danh sách cung cấp quyền truy thông qua các chỉ số lưu và xóa dựa trên chỉ số. Cách sử dụng QList:
Ta duyệt qua QList bằng vòng lặp for và in dữ liệu ra màn hình bằng phương thức at(). Phương thức này nhận tham số đầu vào là chỉ số phần tử.
for (int i=0; i < Weekdays.size(); ++i) {
out << Weekdays.at(i) << endl; }
Dùng toán tử << để chèn một phần tử mới vào sau QList.
Weekdays << "Fri" << "Sat" << "Sun"
3.2.2.2 QRect
Lớp QRect định nghĩa một hình chữ nhật trong mặt phẳng sử dụng độ chính xác số ngun.
Hình chữ nhật thường được biểu diễn dưới dạng góc trên bên trái và kích thước. Kích thước (chiều rộng và chiều cao) của một QRect luôn là tương đương với hình chữ nhật tốn học cơ sở cho việc dựng hình của nó.
Một QRect có thể được tạo ra với một bộ số nguyên gồm đỉnh, chiều rộng và chiều cao, hoặc từ QPoint (là một lớp được sử dụng để định nghĩa tọa độ của một điểm trong không gian) và QSize (là một lớp được sử dụng để xác định kích thước của một đối tượng hai chiều và được quy định là chiều rộng và chiều cao). Đoạn code sau tạo ra hai hình chữ nhật giống hệt nhau.
QRect r1(100, 200, 11, 16);
QRect r2(QPoint (100, 200), QSize (11, 16));
Lớp QRect cung cấp một số hàm trả về các tọa độ hình chữ nhật khác nhau và cho phép điều khiển chúng. QRect cũng cung cấp các hàm để di chuyển hình chữ nhật liên quan đến các tọa độ khác nhau. Ngồi ra có hàm moveTo() với chức năng di chuyển hình chữ nhật, di chuyển góc trên bên trái của hình chữ nhật tới các tọa độ nhất định. Ngoài ra, hàm translate() di chuyển hình chữ nhật cho độ lệch tương ứng với vị trí hiện tại, và hàm translate() trả về một bản sao của hình chữ nhật này.
Hàm size() trả về kích thước của hình chữ nhật tương tự như lớp QSize. Kích thước cũng có thể được lấy ra riêng biệt bằng cách sử dụng các hàm width() và height(). Để thao tác các kích thước sử dụng các hàm setSize(), setWidth()
hoặc setHeight(). Ngồi ra, kích thước có thể được thay đổi bằng cách áp dụng một trong các hàm thiết lập tọa độ hình chữ nhật, ví dụ, setBottom() hoặc setRight().
Hàm contains() cho biết liệu một điểm nhất định nằm bên trong hình chữ nhật hay khơng, và hàm intersects() trả về kết quả TRUE nếu hình chữ nhật này cắt với một hình chữ nhật cho trước. Lớp QRect cũng cung cấp hàm intersected() trả về
hình chữ nhật giao điểm và hàm united() trả về hình chữ nhật bao quanh hình chữ nhật đã cho:
Hình 3.2: Kết quả khi sử dụng hàm intersected() và hàm United()
Lớp QRect cung cấp số hàm trả về các tọa độ hình chữ nhật khác nhau và cho phép điều khiển chúng. QRect cũng cung cấp các chức năng để di chuyển hình chữ nhật liên quan đến các tọa độ khác nhau.
Ví dụ các hàm left(), setLeft() và moveLeft() trong đó: left() trả về kết quả là tọa độ x của cạnh trái hình chữ nhật, setLeft() thiết lập cạnh bên trái của hình chữ nhật với tọa độ x đã cho (có thể thay đổi chiều rộng, nhưng sẽ không thay đổi cạnh bên phải của hình chữ nhật) và moveLeft() di chuyển toàn bộ hình chữ nhật theo chiều ngang, đưa cạnh bên trái của hình chữ nhật tới tọa độ x và kích thước của nó khơng thay đổi.
Lưu ý vì một số lý do lịch sử, các giá trị được trả về bởi các hàm bottom() và right() sẽ sai lệch so với góc dưới bên phải của hình chữ nhật: hàm right() trả về kết quả left() + width() - 1 và hàm bottom() trả về kết quả top() + height() - 1.
Tương tự như vậy là cho kết quả trả về tọa độ khi sử dụng hàm bottomRight().
Ngoài ra, tọa độ x và y của các hàm topRight() và bottomLeft(), tương ứng, cũng có độ sai lệch so với cạnh phải và cạnh dưới.
Hình 3.3: Kết quả trả về khi sử dụng các hàm tọa độ
Để tìm chính xác tọa độ của góc dưới bên phải nên sử dụng x() + width() và y () + height() thay cho right() và bottom(). Và để khắc phục vấn đề này QT
cũng đưa ra một giải pháp khác là sử dụng lớp QRectF: Lớp QRectF định nghĩa một hình chữ nhật trong mặt phẳng sử dụng chính xác tọa độ, và các hàm
QRectF :: right() và QRectF :: bottom() sẽ trả về chính xác tọa độ bên phải và
bên dưới.
3.2.2.3 QString
Lớp QString cung cấp một chuỗi ký tự Unicode.
QString chứa một chuỗi các QChar 16 bit , trong đó mỗi QChar tương ứng
với một ký tự Unicode 4.0.
Khởi tạo một chuỗi: QString str = "Hello";
Như trên ta khởi tạo được 1 chuỗi là "Hello" với kích thước dữ liệu là 5 Ta cũng có thể khởi tạo chuỗi dưới dạng mảng của QChar:
static const QChar data[4] = {0x0055, 0x006e, 0x10e3, 0x03a3}; QString str (data, 4);
Cách tiếp cận khác là đặt kích thước của chuỗi bằng cách sử dụng hàm resize() và để khởi tạo các ký tự dữ liệu cho mỗi ký tự. QString sử dụng địa chỉ bắt đầu từ 0, giống như mảng của C ++.
QString str; str. resize (4);
str [1] = QChar ( 'n' ); str [2] = QChar ( 0x10e3 ); str [3] = QChar ( 0x03a3 );
3.2.2.4 QVector
QVector là một lớp của QT cho phép lưu trữ dữ liệu theo kiểu danh sách. Các
phần tử trong lớp QVector nằm kế tiếp nhau trong bộ nhớ và có thể truy cập thơng qua chỉ số nên có tốc độ truy xuất dữ liệu rất nhanh nếu số lượng phần tử khơng nhiều.
Khởi tạo vector:
Ví dụ trên tạo ra một vector lưu trữ các số nguyên.
QVector<int> vals = {1, 2, 3, 4, 5};
Phương thức size() trả về kích thước của vector – số lượng các phần tử có trong vector.
out << "Kich thuoc cua vector la:" << vals.size() << endl;
Truy xuất phần tử đầu tiên với phương thức first().
out << "Phan tu dau tien la: " << vals.first() << endl;
Truy xuất phần tử cuối cùng với phương thức last().
out << "Phan tu cuoi cung la: " << vals.last() << endl;
Phương thức append() chèn một phần tử vào sau vector.
vals.append(6);
Phương thức prepend() chèn một phần tử vào đầu vector.
vals.prepend(0);